【第2章】分岐制御文


【If制御文】

 判断分岐のIf~ElseIf~Else~End If制御文の使い方はTiny Basic for Windowsと同じです(図2-1.)。


図2-1.If~ElseIf~Else~End If制御文を含むプログラム例


 VB2022で使用できる比較演算子は図2-2.の通りです。ほぼTiny Basic for Windowsと同じです。下2つのIsとIsNotは現段階では???でかまいません。


図2-2.VB2022の比較演算子


 VB2022で使用できる論理演算子は図2-3.の通りです。こちらもほぼTiny Basic for Windowsと同じです。下2つのAndoAlsoとOrElseは短絡的評価と呼ばれるもので、当カテゴリーの実習では使いません。処理スピードを要求される実務システムを作るようになるまでに使い方を覚えていただければ、と思います。


図2-3.VB2022の論理演算子


【If演算子とIIF関数】

 VB2022ではIfは制御文だけではなく、演算子、関数もあります。↑のプログラムのような3択以上では使い辛いですが、値が2択(条件の真偽により2つのうちどちらかの値を選ぶ)の場合、演算子、関数としてのIfの方がプログラムがすっきりと書けます。
 演算子としてのIf(If演算子)の書き方はこうなります。
    変数=If(条件式,値1,値2)
 条件式が成立すれば変数には値1が代入され、成立しなければ値2が代入されます。関数としてのIf(IIf関数)も書き方は同じです。
    変数=IIf(条件式,値1,値2)
 この場合も条件式が成立すれば変数には値1が代入され、成立しなければ値2が代入されます。
 たとえばキーボードから入力した自然数が偶数か奇数かを判定するプログラム(大した意味はないプログラムですが💦)、If制御文で書くと図2-4.のようになります。


図2-4.偶数奇数・判定(If制御文)


 同じプログラムをIf演算子を使って書くと図2-5.のようになります。


図2-5.偶数奇数・判定(If制御文)


 さらに同じプログラムをIIf関数を使って書くと図2-6.のようになります。


図2-6.偶数奇数・判定(IIf関数)


 Ifブロックが5行になるところ、If演算子、IIF関数を使うと1行で済むことがおわかりいただけたと思います。いずれの場合も実行結果は図2-7.のようになります。


図2-6.偶数奇数・判定実行結果


※[IF演算子とIIは函数の違い]
 If演算子は条件式がTrueの場合、値1を評価し、値2は評価しません。Falseの場合、値2を評価し、値1は評価しません。それに対しIIf関数は条件式の結果に関わらず値1、値2の両方を評価します(プログラミングの世界でいう「評価」とは式の値を求めることをいいます。A=10-(5+2)を評価するとAには3が代入されます)。

【Select制御文】

 条件による選択(分岐)が2択3択程度ならIfでいいのですが、それ以上になるとIfで書くとプログラムがわかりにくくなります。VB2022では多分岐に適したSelect~Case~End Select制御文があります。次のように使います。

   Select Case
    Case 条件1
     処理A
    Case 条件2
     処理B
    Case 条件3
     処理C
    Case Else
     処理Z
   End Select

 Select制御文では、Select Caseの後に書かれた式とCaseの後ろに書かれた条件が比較され、条件が成立した時の処理が選択されます。上の例なら条件1がTrueなら(式が条件1を満たせば)処理Aが実行され、実行後はEnd Selectの後に飛びます(条件2からEnd Selectの直前までは無視されます)。条件1がFalseなら条件2の判定に移ります。条件2が成立すれば処理Bが実行され、その後はEnd Selectの後に飛びます(条件3からEnd Selectの直前までは無視されます)。以下同様に条件3以後の判定に移ります。どの条件も成立しない時はCase Elseになり処理Zが実行されます。Case Else以下の処理は必要なければ省略できます。


図2-7.Select制御文での条件式


 ファミリー向けカラオケ店の料金ご案内のプログラムを作ってみます。このカラオケ店の料金はお客様の年齢により次のようになっているとします。

            一般料金   1000円/時 
   65歳以上     シルバー料金 800円/時
   13歳未満     こども料金  500円/時
   7歳5歳3歳   七五三お祝い 無料
   13歳以上18歳以下 中高生料金  700円/時

 このプログラムをIf制御文を使って書くと図2-8.のようになります。


図2-8.多分岐のあるプログラムをIf制御文で書いた場合


 同じプログラムをSelect制御文を使って書くと図2-9.のようになります。Case 条件式を入れる順番に注意が必要です。ひとつ条件が成立すればそれ以降の条件は無視されるので、たとえばこども料金と七五三お祝いの順番を逆にしてしまうと、7歳、5歳、3歳と入力した場合でもこども料金に流れてしまいます。


図2-9.多分岐のあるプログラムをSelect制御文で書いた場合


 どちらの場合も実行結果は図2-10.のようになります。


図2-10.年齢別料金案内のプログラム実行結果
コメント一覧
コメント投稿

名前

URL

メッセージ

- CafeLog -