見出し画像

条件分岐 switch文

"コイントスの冒険: Switch文とIf文の対決"

昔々、ある小さな村に住む冒険者たちが、日常的に行う「コイントスの冒険」がありました。ある日、村の賢者が新しい道具を発明し、それが使われる冒険の分岐点で、村人たちがどんな冒険をするか決定する手段として導入されました。

新たな冒険の手段は、switch文とif文の二つの方法で行われることになりました。村人たちは、どちらが自分たちの冒険に適しているかを探求することになりました。

まず、if文を使用する冒険者たちは、条件ごとに丁寧に分岐しました。例えば:

ChatGpt 例え話 続く
$coin = 1;

if ($coin == 0) {
    echo '表';
} elseif ($coin == 1) {
    echo '裏';
} else {
    echo 'エラー';
}

これに対して、switch文を使う冒険者たちは、もっとシンプルで冒険的な手法を選びました。彼らは条件ごとに異なる冒険への道を提示し、次のように表現しました:

ChatGpt 例え話 続く
$coin = 1;

switch ($coin) {
    case 0:
        echo '表';
        break;
    case 1:
        echo '裏';
        break;
    default:
        echo 'エラー';
        break;
}

ここで注目すべきは、switch文では「条件ごとの冒険」が簡潔に表現され、各条件ブロックの末尾にはbreakがあることです。これにより、条件に一致したらそれ以降の条件は無視され、すぐに次の冒険に進むことができるのです。対照的に、if文の場合は、条件ごとに完全に分岐し、条件が一致しなくても次の条件を確認していくため、コードが冗長になりがちです。さて、どちらの冒険者たちも自分たちの選んだ手法に満足し、それぞれの方法で成功を収めました。そして、その日から村の中で「switch派」と「if派」の冒険者たちが共存し、多くの冒険を楽しんでいくことになりました。

ChatGpt 例え話 end


"`switch`文が`if-elseif-else`よりもシンプルな
点は、条件分岐の表現方法です。

`switch`文では、各条件(`case`)が独立したブロックであり、その条件にマッチした場合に実行する処理を記述します。それに対して、`if-elseif-else`構造では、条件ごとに`if`や`elseif`のブロック全体を記述する必要があります。

具体的には、`switch`文では各条件ごとに`case`を記述し、その条件に合致した場合の処理を直接書きます。これに対して、`if-elseif-else`では条件を示す`if`文や`elseif`文のブロックが個々の条件ごとに必要となります。

つまり、`switch`文では各条件が独立したブロックとして表現されるため、複数の条件を明確に記述し、理解しやすくなります。

`if-elseif-else`構造は条件が増えると可読性やメンテナンス性が低下する可能性があります。条件が多くなると、次々に追加される条件ごとに新しい`if`文や`elseif`文を追加しなければならず、コードが肥大化してしまいます。

また、条件が増えると条件の間違いや漏れを見逃す可能性も高まります。新しい条件を追加する際に、既存の条件との関係や優先順位などを把握することが難しくなり、バグを生みやすくなります。

その点、`switch`文では各条件が`case`として独立し、新しい条件を追加する際には新たな`case`を追加するだけで済むため、可読性が高く、新しい条件の追加や変更が容易です。条件分岐が複雑になる場合や条件が増える可能性がある場合は、`switch`文の使用が有益です。"

特徴説明



制御構造

制御構造は、プログラムの実行フローを制御するための構造や命令のことです。プログラミング言語において、特定の条件に基づいて命令の実行を決定したり、ループを実行したり、あるいは他のプログラムのフローを制御するための仕組みを指します。条件文、ループ文、分岐文などがその例で、それらを組み合わせてプログラムの実行順序や条件に合わせた動作を実現します。制御構造はプログラムの論理的な流れを決める重要な要素です。


条件分岐
switch文

switchは、条件分岐を行うための制御構造の一つです。条件分岐を行うための一つの手法としてswitch文が使われます。

switch文は通常、ある変数の値を検査し、その値に応じて異なるケース(case)に分岐します。各caseは、特定の値に対して実行される処理を定義します。また、defaultブロックはどのcaseにも一致しない場合に実行される処理を定義します。

break文は、switch文の各caseブロック内で使用され、そのcaseブロックの実行が終了した後、switch文から抜け出す役割を果たします。break文がない場合、条件に一致したcaseブロックの処理が終わった後も、次のcaseブロックの処理が逐次実行される可能性があります。break文を使用することで、caseブロックの処理後にswitch文から抜け出し、次の文に進むことができます。

(switch文内でbreakがない場合、条件に一致したcaseブロックが実行された後も、それ以降のcaseブロックが条件に一致しなくても順番に評価・実行されます。この動作は「フォールスルー (fallthrough)」と呼ばれます。)

また、switch文の後に条件を書き、その次の行でcaseブロックを始めるためにコロン:が使われます。これにより、それぞれのcaseやdefaultの開始を示します。

defaultはswitch文内で必須ではありません。ただし、defaultを使うことで、すべての条件に一致しなかった場合のデフォルトの処理を提供できます。

$coin=1;

switch ($coin) {
    case 0: ←コロン:を使用
        echo '表';
        break;
    case 1:
        echo '裏';
        break;
    default:
        echo 'エラー';
        break;
}

// 出力: 裏
$fruit = "apple";

switch ($fruit) {
    case "apple":
        echo "りんごです。";
        break;
    case "banana":
        echo "バナナです。";
        break;
    case "orange":
        echo "オレンジです。";
        break;
    default:
        echo "その他の果物です。";
        break;
}  

// 出力: りんごです。


if, elseifによる分岐が多く複雑な場合、switch文で書き換えるとシンプルで読みやすいコードにできます。
switch(式)の(式)がcaseの値と一致したとき、そのブロックが実行されます。caseのどれにも一致しなかった時、defaultのブロックが実行されます。

(※ switch(式)の部分で式は、厳密なプログラム用語としての「式」を指しているわけではなく、単にswitch文の制御対象となる値を指しています。switch文は与えられた値を評価し、caseの値と一致するかを確認する条件分岐の仕組みです。)



この記事が気に入ったらサポートをしてみませんか?