2019年11月18日

師匠のVB.NETどたばた塾~第3回

sisyo.gif
師匠T:……。

deshi.gif
弟子D:どうしたのですか、師匠? 何か難しい顔を……。

sisyo.gif
いや、もうすぐ12月、クリスマスであろう? いやなんでもない。

deshi.gif
(師匠の体が泣いている……!?)

sisyo.gif
さて、そんな世俗のことなどどうでもよい。今回もびしばしいくぞ!
今回は繰り返しについてじゃ。はっはっはっ!

deshi.gif
は、はぁ……。

【 やってみせい! 】

sisyo.gif
さて、今回はいきなり問題じゃ。1から5までの合計を求めるプログラムを作ってみるがよい。

deshi.gif
はいっ。かたかたかた……これでいかがでしょうか?

vb1911-l01.JPG

sisyo.gif
ふむ、まずまずじゃな。では、1から100までの合計を表示させてみよ。

deshi.gif
はい。かたかた……

deshi.gif
がーーーー!! 無理です! 気力がもちません!

sisyo.gif
そうであろう。そこで役立つのが、繰り返しを司る、Do~Loop文と、For~Next文なのだ。まずは、繰り返しの基本形・Do~Loop文について説明していくぞ!

deshi.gif
はい!

【 臨機応変! Do~Loopなのじゃ! 】

sisyo.gif
さて。Do~Loop文はある条件が満たされる(あるいは満たされなくなる)まで繰り返しを行うものであり、このように書くぞ。

(書き方1)
Do While 条件式
Loop

(書き方2)
Do Until 条件式
Loop

(書き方3)
Do
Loop While 条件式

(書き方4)
Do
Loop Until 条件式

(書き方5)
Do
Loop

deshi.gif
色々な書き方があるのですね。それぞれ、どのような違いがあるのですか?

sisyo.gif
うむ。まず、条件が満たされている間繰り返すか、条件が満たされていない間繰り返すか、からじゃ。
書き方1、書き方3の場合、つまり、Whileとついている場合は、条件が満たされている間繰り返す。つまり、条件が満たされなくなるまで繰り返すのじゃ。

deshi.gif
ふむふむ。

sisyo.gif
他方、書き方2と書き方4、Untilとついている場合は、条件が満たされていない間繰り返す。つまり、条件が満たされるまで繰り返すのだ。

deshi.gif
なるほど。

sisyo.gif
次は、最低何回繰り返すか、についてじゃ。書き方1と書き方2、つまり、Do側にUntil/Whileがついている場合は、このDoの時点で繰り返すかどうか判断するので、繰り返す条件が成立しないときは、1回も繰り返さずに終えることになる。

vb1911-z01.jpg

deshi.gif
ふむふむ。

sisyo.gif
一方、Loop側についている場合(書き方3と書き方4)は、Do~Loop内の命令を実行した後、Loopで判断するので、最低1回は繰り返すことになるのだ。

vb1911-z02.jpg

deshi.gif
なるほど!

sisyo.gif
ここまでのことを図に表すとこうなるぞ。

vb1911-z03.JPG

deshi.gif
わかりました。それで、書き方5については?

sisyo.gif
うむ。この場合は、無限に繰り返すのだ。

deshi.gif
ええ!? それはとても困るのでは?

sisyo.gif
ふふふ、安心せい。ちゃんと止めるためのものが用意してある。それがExit Do文じゃ。

deshi.gif
Exit Doですか。

sisyo.gif
うむ。このExit Do文が実行されると、そこで繰り返しは終了し、Loopの次の文から命令を実行していくのだ。
そこで、このExit Do文をIF文などと組み合わせて、条件が満たされたときにExit Do文を実行するようにするのじゃ。

deshi.gif
なるほど。

sisyo.gif
それでは弟子よ。Do~Loop文を活用し、1から10までの合計を計算するプログラムを作ってみるがよい。

deshi.gif
はい! かたかた……これでいかがでしょうか?

vb1911-l02.JPG

sisyo.gif
うむ、見事じゃ!と言いたいところだが、まだ甘いのう。実行結果を今一度確認してみるがよい。

vb1911-g01.JPG
↑ あれ?

deshi.gif
え……? あっ、45になってる。正解は55のはずなのに。どうしてでしょう?

sisyo.gif
ふふふ。プログラムの流れを追ってみるがよい。aが9の時はどうなっておる?

deshi.gif
あっ! sumに足したあと、aに1を足して10になって、そこでDoに戻って10になってるからこの10が足されずに抜けてしまったんですね。

sisyo.gif
その通りじゃ。この場合は、条件をa<>11か、a <= 10にするのが正解じゃな。

deshi.gif
なるほど。

sisyo.gif
このように、条件式の内容、またDo側につけるかLoop側につけるかでも、結果は全く違うものになってしまう。気を付けることじゃ。

deshi.gif
はいっ!

【 融通はきかんが簡単! For~Nextじゃ! 】

sisyo.gif
さて。よくよく考えてみれば、今回のプログラムの主題は、1ずつ増えていく値を合計を足していく、というものであったな。

deshi.gif
はい。

sisyo.gif
このような、条件となる値が一定値ずつ増えていく流れの場合、もっと簡単に書けるものがある。それが……

deshi.gif
For~Next文ですね!

sisyo.gif
うむ、その通りじゃ。For~Next文の書き方は、昔のBASICと同じく、このように書く。

(書き方)
For 変数=値1 To 値2 Step 値3
Next

sisyo.gif
この文は、いたって簡単。まず変数の値が値1からスタートし、値3だけ増減していく。そして、値2以上(以下)になったら、繰り返しを終えるのだ。なお、この判断は、Nextの時点で行われる。
そうそう、値3が+1の時は、Step以降は省略することができるぞ。

deshi.gif
なるほど。

sisyo.gif
さて、それでは弟子よ。改めて出題じゃ。For~Nextを活用して、1から10までの合計を計算するプログラムを作ってみるがよい。

deshi.gif
はい!

vb1911-l03.JPG

deshi.gif
ちゃんと、55と正解がでましたよ! しかも、Do~Loopと比べて、若干繰り返しの部分が短くなってすっきりしてますね!

sisyo.gif
そうであろう。臨機応変に使えるDo~Loopと、シンプルなFor~Next。これらを使いわけて使いこなすことが、繰り返し処理の肝心な部分じゃ。精進するように。

deshi.gif
はい!

sisyo.gif
では、今日はここまでじゃ。次回は、配列変数について学ぶことにする。復習を忘れてはならぬぞ!

==========

※次の更新は、『フリーゲームレビュー』の予定です。お楽しみに!

posted by 裏編 at 13:40| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする

2019年10月22日

師匠のVB.NETどたばた塾~第2回

sisyo.gif
師匠T:さて。前回は、入出力と変数について説明したが、実はあることを説明するのを忘れておった。

deshi.gif
弟子D:さすがに師匠もそろそろボケ……いてっ。
それで、忘れていたことってなんなんです?

sisyo.gif
うむ。それは、保存についてじゃ。これができぬと、VB.NETを終了させたら、せっかくのプログラムが消えてしまうからの。
それで保存についてじゃが、VB.NET終了時に保存するかどうか聞かれるが、メニューバーのディスクのアイコンを押すことでも保存することができる。

vb1910-g01.JPG
↑保存していなくても、VB.NET終了時に保存するかどうか聞かれるぞ。

vb1910-g02.JPG
↑このアイコンをクリックして保存するのだ!

sisyo.gif
また、プロジェクトを読み込むときは、開始時の画面の左半分に、今までに開いたプロジェクトのリストがあるからそれをクリックしてもいいし、右側の『プロジェクトやソリューションを開く』をクリックしてもいい。どちらの方法でも読み込むことができるぞ。後者の場合は、クリックした後に、ファイルを選ぶダイアログが開くから、そこから目的のプロジェクトを選ぶがよい。

vb1910-g03.JPG
↑どちらを使っても読み込めるぞ!

deshi.gif
なるほど!

sisyo.gif
さて、ではここからが本題じゃ、いくぞ!

【 なぜ? 】

sisyo.gif
さて。今回はいきなり、わしのほうからプログラムを見せよう。これを例の如く、Sub Main()とEnd Subの間に書くがよい。

vb1910-l01.JPG

sisyo.gif
できたら実行してみよ。最初は5を入力してみるがよい。

deshi.gif
はい!

vb1910-g04.JPG
↑5を入力した結果

deshi.gif
入力してみました。『10個のリンゴを5人で分けると、一人2個』と表示されましたよ。

sisyo.gif
うむ。では続いて、もう一度実行し、今度は0を入力してみよ。

deshi.gif
はい……あっ!

vb1910-g05.JPG
↑あっ!

deshi.gif
何やら、変なウィンドウが出てきましたよ!

sisyo.gif
うむ。これは、7行目の c = a / b が原因じゃ。今の入力では変数aに10が、bには今おぬしが入力した0が入っておる。これを見て、何か気づかぬかな?

deshi.gif
あっ! 確か、0で割ることはできなかったのでは?

sisyo.gif
うむ、その通り。そんな計算をしたから、VB.NETは『そんな割り算はできんぞ!』と例外を出したのじゃ。『例外』については覚えておるか?

deshi.gif
はい。Java道場で勉強した覚えが……。エラーみたいなものでしたっけ。でも、これを解決するにはどうしたらいいのですか?

sisyo.gif
うむ。Javaの時と同じように、例外処理の構文を使うのも一つの手ではあるが、それは条件判断文について学ぶという今回の趣旨に反する。
そこで今回は、変数bに0が入った時には、計算する前に警告のメッセージを表示させることにしよう。

deshi.gif
なるほど。それで、どうやって。

sisyo.gif
うむ。まず、変数bが0かどうかをチェックする。そして、0なら警告メッセージを出し、0でなければ普通に計算させて、結果を表示させるようにするのだ。そこで!

deshi.gif
おおっ!!

sisyo.gif
『もし~なら~をおこなう』というような処理を行わせる時に使うのが、今回説明するIF~THEN文なのじゃ!

deshi.gif
おおぉぉっ!

sisyo.gif
このIF~THEN文は、次のように使うぞ。

If 式 Then
式がtrueの時に行う処理
Else
式がfalseの時に行う処理
End If

例:
If a >= 5 Then
  b = 0
Else
  b = 1
End If

sisyo.gif
式がtrueの時は、IfとElseの間にある処理を、falseの場合は、ElseとEnd Ifの間の処理を実行する。
例の場合だと、aが5以上の時は、If~とElseの間にあるb = 0が実行される。そうでなければ、ElseとEnd Ifの間にある、b = 1が実行されるのじゃ。

deshi.gif
ふむふむ。

sisyo.gif
それと、falseの時には何もしないのであれば、Elseは省略することもできるぞ。

deshi.gif
なるほど。式はどのように書けばいいのですか?

sisyo.gif
うむ。基本的は、Javaの時と同じじゃ。普通の式を書いてもいいし、条件式を書いても良い。
なお、上の説明では、式がtrueかfalseによって処理が分岐する、となっておるが、VB.NETの条件式でも、成立すればtrue、成立しなければfalseを返すので、『式が成立すれば~』『式が成立しなければ~』と読み替えてもおかしくはないであろう。
なお、条件式はJavaと同じようにこのように書く。

値or式or変数 比較演算子 値or式or変数

sisyo.gif
ただし、比較演算子は、一部Javaのものとは異なっておるので注意が必要じゃ。

vb1910-c01.JPG
↑VB.NETとJavaの比較演算子の対応

deshi.gif
『等しい』と『ではない』の比較演算子が違ってるわけですね。

sisyo.gif
うむ。それと、もちろん論理演算子で二つの式をつなぐこともできるが、Javaでは使えた&&や||は使うことはできぬ。前者はAnd、後者はOrを使うので気を付けること。なお、Andは二つの式が共にtrueならtrue、Orは二つの式のうちどちらかがtrueならtrueを返すぞ。

〇 (a>5) And (b=3) ×(a>5)&&(b==3)
〇 (c=5) Or (d<>2) ×(c==5)||(d!=2)

sisyo.gif
さて、ではここまでのことを踏まえて、先ほどのプログラムを直してみるとしようぞ。
どうすればいいかな?

deshi.gif
うーん。変数bが0なら警告を出して、そうでなければ従来の処理を行えばいいんだから……カタカタ……これでどうでしょう?

vb1910-l02.JPG

sisyo.gif
ふむ。実行してみるがよい。

deshi.gif
はい!

vb1910-g06.JPG

sisyo.gif
うむ、ちゃんと警告メッセージが出ているの。正解じゃな。見事じゃ!

deshi.gif
ありがとうございます! 俺だって本気を出せばこのくらい……いてっ。

sisyo.gif
調子にのるでない。さて、話はもうちょっと続くのじゃ。

【 SELECT CASEとはなんぞや? 】

sisyo.gif
条件判断を行う文は、If~Then文だけではない。Select Case文というのもあるのじゃ。

deshi.gif
それはどのようなっ?

sisyo.gif
うむ。Java道場で勉強したswitch文は覚えておるか?

deshi.gif
えーと……なんでしたっけ?

sisyo.gif
はあっ!!(飛び蹴り)

deshi.gif
うわあっ。

sisyo.gif
指定した変数の値によって、処理を分岐させる文じゃ。それと同じ働きをするのじゃ。
さて、このSelect Case文の書き方はこうじゃ。

Select Case 変数
Case 値1
変数が値1の時に行う処理
Case 値2
変数が値2の時に行う処理
……
End Select

sisyo.gif
なお、switchと違い、Select Caseでは、処理の最後にbreak(に該当する命令)を入れる必要はない。

deshi.gif
ということは、breakを省略して、処理をまとめる裏技は使えないわけですか……。

sisyo.gif
そういうことじゃな。あと、Javaでのdefaultのように、列挙した数以外の値が来たときの処理を書きたいときは、Case Elseを使う。

Select Case a
Case 1
Case 2
Case 3
Case Else
〇〇〇←1、2、3以外の数の時は、ここが実行される
End Select

deshi.gif
なるほど!

sisyo.gif
では、今日はここまで。次回は、繰り返しの文、Do~LoopとFor~Nextについて説明するぞ。
ここまでの復習、そして予習を忘れないように!



※次の更新は、『レトロゲーレビュー』の予定です。お楽しみに!

posted by 裏編 at 14:52| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする

2019年09月16日

師匠のVB.NETどたばた塾~第1回

【 それは、やはり街角にて 】

deshi.gif
弟子D:ししょおおおぉぉ。

sisyo.gif
師匠T:どうした。男子たる者、何をめそめそしておる。

deshi.gif
VB.NETを始めたのですが、どこをどうしたらいいのかわからなくて。

sisyo.gif
たわけがっ!!(弟子に飛び蹴り)

deshi.gif
うわぁ、師匠、何をなさるんです。

sisyo.gif
VB.NETにつまずいて泣きつくとは、なんと女々しいことか。わしが、その心根を叩きなおしてくれるわ!

(しばし、師匠と弟子の戦いが続く)

sisyo.gif
むぅ、こいつの拳には……曇りがない! さてはおぬし、かなりつまずいておるな!

deshi.gif
だからそうだと言ったでしょうがあああ。

sisyo.gif
むむ、ならば仕方あるまい。このわし自らが、お主にVB.NETについて叩き込んでくれようぞ。

deshi.gif
うぅ、お願いします、師匠。

【 それは、やはり街角にて・その2 】

sisyo.gif
さて、今回の講座じゃが、二部に分けて進めようと思う。まず第一部では、VB.NETの基本を学び、VB.NETでプログラムを作るところまで進める予定じゃ。

deshi.gif
ふむふむ。

sisyo.gif
そして第二部ではゲーム開発用ライブラリ・DXライブラリを使ったゲームの開発についてレクチャーしていこうと思う。覚悟はいいか?

deshi.gif
はいっ!!

sisyo.gif
おぉ、いい返事じゃな。ではさっそく始めるぞ! 第一部のスタートじゃ!

【 VS2019を動かすぞ! 】

sisyo.gif
さてさて。VB.NET初心者のお主に、いきなりGUIを使ったプログラムを作れと言われても無理な話であろう。

deshi.gif
はいっ。

sisyo.gif
自信満々に肯定することではないと思うが……まぁよい。そこでまずは、コンソールアプリ作りを通じて、VB.NETのBASIC言語について慣れていくことにするぞ。まずは、変数についてじゃ。
それではまずは、Visual Studio 2019を起動するがよい。

deshi.gif
はい。このような画面が出てきました。

vbnet-p01.JPG

sisyo.gif
そしたら続いて、『新しいプロジェクトの作成』をクリックするのだ。

vbnet-p02.JPG

deshi.gif
はい。そしたら今度はこんな画面が。

vbnet-p03.JPG

sisyo.gif
うむ。そしたら、『言語』をクリックし、リストからVisual Basicを選ぶ。
すると、下に作ることのできるプロジェクトの種類のリストが出てくるので、そこから『コンソールアプリ(.Net Framework)』をクリックして選択し、『次へ』と書かれたボタンをクリックするのだ。

vbnet-p03b.jpg

deshi.gif
プロジェクト名を入力する画面が出てきましたね。

vbnet-p04.JPG

sisyo.gif
うむ。後は、プロジェクト名や、保存場所、ソリューション名、フレームワークを設定して、『作成』ボタンをクリックすれば準備はOKじゃ。今回は、プロジェクト名を『jyuku01』、その他の項目はそのままにしておこう。もっとも、プロジェクト名を変えれば、ソリューション名もそれに合わせて変わるようになっておるがの。

deshi.gif
はい……おおっ! プログラミングの画面が出てきましたよ!

vbnet-p05.JPG

sisyo.gif
うむ、ここからいよいよプログラミングの開始じゃぞ!

【 最初のプログラムを書こう! 】

sisyo.gif
さて。コンソールアプリのプログラミングをする場合、コードはSub Main()とEnd Subの間に書く。
というわけで、さっそくこの中に、プログラムを書いていくとしようぞ。
次のコードを入力するがよい。

vbnet-s01.JPG

sisyo.gif
入力し終わったら、右向き三角のボタンをクリックしてみるのだ。プログラムが動くぞ。どうじゃ?

vbnet-p06.JPG

deshi.gif
あっ、出ました! 黒いウィンドウが出ましたよ。『変数aは3』と書いてますよ!

sisyo.gif
うむ、うまくいったようじゃのう。それではこれから、このプログラムの内容についてレクチャーしていくぞ!

【 最初のプログラムの中身だ! 】

sisyo.gif
さて、まずはこれからじゃ。

Dim a As Integer

sisyo.gif
ここでは、aという変数を定義しておる。変数とは何かは、既に知っておるな。

deshi.gif
はい!……。

sisyo.gif
どうした? まさか、忘れたとかいうのではあるまいな?

deshi.gif
い、いえ、そんなことは。ただ、記憶の一部をデ〇ルガン〇ムに……。

sisyo.gif
はあっ!!(弟子に飛び蹴り)

deshi.gif
うわあっ

sisyo.gif
たわけ者が。変数とは、いわば文字列や数値を入れておくことのできる箱のようなものじゃ。
教科書を読んで覚え直してこい!

deshi.gif
は、はい……。

sisyo.gif
さて。他の言語と同じように、VB.NETでも変数はあらかじめ定義しておかねば使うことはできぬ。
そして、VB.NETでは、変数はDim文を使って定義するのじゃ。
このDimは次のようにして使う。

Dim [変数名] As [変数の型]
例:Dim b As Double

sisyo.gif
変数の型にはたくさんの種類があるので、ここでは代表的なものだけ記しておくとしようぞ。

・Integer……整数を扱う型
・Long……Integerより、さらに桁数の多い整数を扱う型
・Double……小数を扱う型
・String……文字列を扱う型

sisyo.gif
さて、次じゃ。

a = 3

deshi.gif
これは、変数aに3という値を入れているんですよね。

sisyo.gif
うむ、その通り。このように、変数(の名前)と、変数や数値や文字列や式をイコールで結ぶと、右辺の結果を左辺の変数に入れる命令になるのじゃ。

例:
b = 4.2→4.2という値を変数bに入れる
c = "abc"→abcという文字列を変数cに入れる
d = 3 + 2→3+2の答えの数値を変数dに入れる

sisyo.gif
ここで、四則演算について説明しておこうぞ。足し算、引き算については、そのままの演算子(記号)を使うが、掛け算、割り算については、通常とは違う記号を使うことになっておる。

・×→*
・÷→/

deshi.gif
ふむふむ。わかりました!

sisyo.gif
そして次じゃ。

Console.WriteLine("変数aは" + Str(a))

sisyo.gif
これは難しいことはない。()内の内容……この場合は、"変数aは" + Str(a)の結果……を表示しているだけじゃ。コンソールアプリでは、このようにして、結果を表示するのだ。

deshi.gif
ふむ。師匠、Str(a)というのは?

sisyo.gif
うむ。Strというのは、()内の変数の値を、文字列に変えてくれる特別な命令……関数じゃ。ここでは、変数aを表示させるためのおまじない、と思っておればよい。

deshi.gif
はいっ。

sisyo.gif
なお、文字列の式において、足し算は二つの文字列をつなげる意味となる。例えば、今回の場合だと、『変数aは』という文字列と、変数aの内容(値を文字列にしたもの)をつなげているわけじゃな。例えば、変数aに4が入っていたとすると、『変数aは』と『4』がつながって、『変数aは4』という文字列になる、というわけじゃ。

deshi.gif
なるほど!

sisyo.gif
そして最後。

Console.ReadKey()

sisyo.gif
これも難しいことはない。ただキー入力を受け付けているだけじゃ。これを入れておかないと、ウィンドウがすぐに消えてしまうからの。キー入力の後に終わらせるようになっているのじゃ。

deshi.gif
なるほど、よくわかりました。師匠!

sisyo.gif
では、今回はここまで。次回は、入力と条件判断について学んでいくことにするぞ。
予習、復習を欠かしてはならぬ!

==========

※次の更新は、『暇つぶしはツールバーゲームで』の予定です。お楽しみに!
posted by 裏編 at 09:16| Comment(0) | 師匠のVB.NETどたばた塾 | 更新情報をチェックする