サイトアイコン かみ砕きゴールデンマスク 我が道を往く

プログラミング超基本 条件分岐って何?

かみ砕いて言えば、分かれ道のことです。例えば右と左の二つの道があって何かに従って道を選ぶことです。ときには行き先が複数の場合もあります。道で言えば五差路とか--。

アルゴリズムを考えていると、ある変数の値によって処理の内容を変えたい時があります。そのときは条件分岐という処理を行い、目的に合った後続の処理を行うことができます。

玉子料理を作ろうとして冷蔵庫から玉子を取り出します。この時点では目玉焼きを作ろうと考えています。ですが、残念なことに玉子を割ったとき黄身をつぶしてしまいました。そこで、目玉焼きを作らずにスクランブルエッグにしました。このとき玉子を割ったときの黄身の状態で作業が分かれることを条件分岐と言います。

if文は条件分岐の代表

if文は条件分岐の代表と言ってよいでしょう。 条件に合っていれば次の○○を行う。条件の書き方は「プログラミング超基本 条件って何?」 をご覧ください。
上の玉子料理だと

もし、黄身がつぶれていなかったら、目玉焼きを作る。
そうでなければスクランブルエッグを作る。

C系っぽいの記述だと

if (黄身==割れていない)
{
   玉子焼きを作る;
}
else
{
   スクランブルエッグを作る;
}

となります。条件が2択であることに着目してください。では、2択より多い場合はどうすればよいでしょうか。
そういうときは入れ子とかelse ifを使います。

//入れ子方式
if (条件1)
{
   処理1
}
else
{
  if (条件2)
  {
    処理2
  }
  else
  {
    ・・・・・・
  }
}

//else if方式
if (条件1)
{
  処理1
}
else if(条件2)
{
  処理2
}
else if (条件3)
{
  処理3
}
else if ・・・・・

入れ子やelse ifで繫いでいくことができます。上位あるいは上から順番に条件式で判定し、最初に満たされた場所で処理が行われます。最初に満たされた条件以降に改めて条件に満たしても既に分岐されているので2回目以降に満たされた条件での処理は行われません。
でも、あまり入れ子を多用すると見難いです。できることならなるべく深い入れ子は使用しないことをお勧めします。
例えば、条件1が a=1 、条件2が a=2 というように、ある変数の値によって処理を分けるというフラグ的な変数のときは便利な方式があります。
C系言語ではswitch、VB系ではSelect caseがあります。

C系
switch(a)
{
 case 1:
  処理1
  break;
 case 2:
  処理2
  break;
 case 3:
  処理3
  break;
 default:
  標準処理
  break;
}

VB系

Select Case a
 Case 1
   処理1
 Case 2
   処理2
 Case 3
   処理3
 Case Else
   標準処理
End Select

この方がすっきりとしますし、後で修正するときもやりやすいと思います。

まとめ

if文は2択なので、複数の条件式を入れ子にして絞り込んでいくことができる。判定する内容がフラグ的なものであればswitch(C系)とかselect case(VB系)を使うとすっきりとした記述が可能である。結果は同じであったとしても記述はすっきりしていた方が良いですよね。なぜなら、後で修正するときにわかりやすいので。日頃から心がけていく必要があると思います。

モバイルバージョンを終了