3秒でわかる
条件が成り立つかどうかで実行する処理を切り替える仕組み。入力や状態に応じて動きを変える、プログラムの分かれ道にあたります。
30秒図解
もう少し詳しく
どういうものか
条件分岐は、真か偽かを返す式を評価し、その結果によって実行するコードを選ぶ構文です。多くの言語では if で始まり、条件を追加する else if (Python では elif)、どれにも当てはまらない場合の else が続きます。選択肢が値の一致で決まるときは switch や match を使う言語もあります。
条件に書く式は、比較演算子で作った真偽値のほか、and や or や not で組み合わせられます。
なぜ必要か
上から下へ流れるだけのプログラムは、毎回まったく同じ結果しか出せません。入力された年齢で料金を変える、在庫が0なら購入ボタンを隠す、といった判断はすべて条件分岐で表現します。エラー処理も同じで、想定外の値が来たときに別の道へ進ませる仕組みがないと、そのまま壊れた結果を返してしまいます。
具体例
購入金額から送料を決める処理です。
def shipping_fee(total, is_member):
if total >= 5000:
return 0
elif is_member and total >= 3000:
return 200
else:
return 500
print(shipping_fee(6000, False)) # 0
print(shipping_fee(3500, True)) # 200
print(shipping_fee(3500, False)) # 500条件は上から順に試され、最初に当てはまった枝だけが実行されます。
つまずきやすいところ
比較の == と代入の = の取り違えは、いまだに最頻出のミスです。Python では if x = 5 は文法エラーになりますが、C や JavaScript では意図せず動いてしまう書き方が残っています。
条件の順序も落とし穴です。上の例で total >= 3000 の枝を先に書くと、6000円の買い物でも200円が返ります。範囲を判定するときは、狭い条件から先に置きます。
そして最も見つけにくいのが、小数の比較です。0.1 + 0.2 == 0.3 は多くの言語で偽になります。浮動小数点は2進数で表せない値を近似しているためで、金額のような正確さが要る場面では整数の円単位で扱うか、誤差を許容する比較にします。
似た用語との違い
三項演算子は、値を選ぶだけの短い分岐を1行で書く記法です。fee = 0 if total >= 5000 else 500 のように、代入の右側に置けます。処理が複数行になるなら if 文のほうが読みやすく、無理に1行へ詰める意味はありません。