プログラミング言語における選択処理(条件分岐)は、基本的な概念でありながら言語の設計思想によって文法や機能が大きく異なります。代表的な5つの言語を対象に、その特徴と違いを整理しました。
言語主な分岐構文形式の分類特徴・最近の傾向
Python
if / elif / else
match - case式/文の両方バージョン 3.10 から導入された構造的パターンマッチング(match-case)により、型やデータ構造に応じた複雑な分岐が簡潔に記述可能。
JavaScript / TypeScript
if / else
switch - case
三項演算子文(三項演算子は式)伝統的な switch はフォールスルー(break 忘れ)のリスクがある。TypeScript では判別可能なユニオン型を用いた型安全な分岐(Exhaustiveness check)が特徴。
Rust
if - else
matchすべて「式」分岐が値を返すため、直接変数へ代入可能。match 構文では全パターンの網羅(網羅性チェック)がコンパイル時に必須。
Go
if / else
switch - case文switch の各 case で break が不要(デフォルトで抜ける)。if や switch の直前に簡易ステートメント(初期化文)を書ける独特の記法を持つ。
C言語
if / else
switch - case文他の言語の基盤となった最も標準的な構文。switch は整数・文字型のみに限定され、文字列などの複雑な判定には直接使えない。
主要な相違点とポイント
「文(Statement)」か「式(Expression)」か
Rustなどのモダンな言語では if や match が「式」として扱われるため、let x = if cond { 1 } else { 2 }; のように直接分岐結果を変数に代入できます。CやGoなどでは「文」であるため、別途変数を用意して代入する必要があります。
switch の挙動(フォールスルー)
C言語やJavaScriptの switch は break を書かないと次の case に処理が流れる(フォールスルー)設計ですが、Go言語やPythonの match では明示的な指定がない限り1つの case のみ実行して終了します。
パターンマッチングの進化
近年の言語拡張(Pythonの match-case や Rustの match)では、単なる値の一致確認にとどまらず、オブジェクトの構造解体や型の判定を兼ねた高度な分岐が標準化されています。
Register as a new user and use Qiita more conveniently
- You get articles that match your needs
- You can efficiently read back useful information
- You can use dark theme