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どたばた塾 | 更新情報をチェックする
この記事へのコメント
コメントを書く
コチラをクリックしてください