論理構造その2 – 選択 基礎編第12回


20140218

前回お話しした順次処理では、処理がA→B→Cと記述された流れに沿って実行されます。今回はこの流れ(フロー)を制御し分岐する選択処理について説明します。ここでは「選択」と呼んでいますが、条件分岐条件選択などとも呼ばれます。

if 文

「もし~ならば…する」という処理です。

  • もし雨ならば家にいる
  • もし1万円以下なら○○を購入する

こうした処理を次の式で表します(C系、Javaなど)。
if (条件) {
処理
}

条件が真の場合処理が実行され、偽の場合は実行されません。
VB/VBAでは、

if 条件 Then
処理
End if

となります。
条件には比較演算子が使用されます。

  • if (nextWeather == “晴”)
  • if (price <= 10000)

また、論理演算子を使って複数の条件を指定することもできます。

if-else 文

「もし~ならば…し、それ以外は…する」という処理です。
if文では、条件により処理をするかしないかを判断していましたが、if-else文を使うと、条件が真のときに実行する処理と偽のときにする処理を分けることができます。

  • もし雨ならば家にいるが、晴れたら買い物に出かける
  • もし1万円以下なら○○を購入するが、1万円以上なら××を購入する

このように条件が真であれば処理A、偽であれば処理Bと、処理の流れを分岐することができます。

if (条件) {
処理A
}
else {
処理B
}

と記述します。
VB/VBAの場合は、If-Then…Else…End If

if-else-if 文

「もし~の場合は…、~の場合は…、…」といくつもの場合分けをするときの処理です。

if (条件1) {
処理A
}
else if (条件2) {
処理B
}
else if (条件3) {
処理C
}

else {
処理Z
}

と記述します。
VB/VBAの場合は、If-Then…ElseIf…Else…End If
このif-else-if文は、上から順番(記述順)に条件が評価されていきます。「条件1の評価が真であれば、処理Aを実行してif構文を終了。偽であれば、条件2を評価し真であれば処理Bを実行…」という流れで処理されます。したがって、X= 150のとき、


else if (x > 10) {
処理A
}
else if (x > 100) {
処理B
}

とすると、処理Aが行われ、本来の処理Bが実行されることなく終了してしまうことに注意してください。また、else-if文で複雑な処理が可能ですが、数が多く評価対象(上記の場合「x」)が同じ場合、通常は以下で述べるswitch文を使用します。

ネスト(入れ子)構造

if文の中にif文を記述することができます(if-else、if-else-ifも同様)。

if (条件1) {
if (条件2) {
if (条件3) {
処理A;
}
else {
処理B;
}
else if (条件2.1) {

このように条件を上手く組み合わせることで非常に複雑な処理が可能になります。ただし、深くネストし過ぎると、プログラムが読みにくくなり、エラーの原因にもなりますので、必要最小限にしておきましょう。

Switch 文

先程説明したif-else-if文はswitch文を使って表すことができます(言語によってはサポートされていないものもあります)。

switch (式) {
case 値1:
処理A;
break;
case 値2:
処理B;
break;

default:
処理Z;
}

この様に記述されます。「式」は評価式の「左辺」、値は「右辺」に当ります。式が値に一致する場合、そのcase内の「break」までの処理が実行され、どの値にも一致しない場合は「default」の処理が実行されます(defaultの処理は省略可能)。やはり、記述順に実行されることに注意してください。
例:
switch (価格) {
case >=10000:
20%割引;
break;
case >=5000:
10%割引;
break;
case >=1000:
5%割引;
break;
}

VB/VBAの場合、switch文ではなく、Select Case文になります。

Select Case 式
Case 値1
処理A
Case 値2


End Select

まとめ

今回は選択の論理構造について説明しました。if文(else、else-ifを含む)を使った条件分岐により複雑な処理が可能になります。論理演算子を使って高度な場合分けもできます。ネスト構造を使って分岐した処理をさらに細分化することができます。ただし、複雑になればなるほど、コードが読みにくくなりエラーが発生しやすくなります。

  • 複雑にし過ぎない
  • 条件に当てはまらない場合も想定する
  • 処理の流れを把握し、順番を間違えない

プログラミングするときは、以上の3点に注意してください。
次回は、論理構造の3つ目「反復」について説明します。いわゆる「ループ」ってやつです。
では、また。

コメントしてみる