TypeScript switch文

JavaScriptでは、switch文は一つの変数や式に対して様々なケースを処理するためによく使われます。たとえば、switch文を使用して異なるタイプのユーザー入力を処理したり、変数の状態に応じて異なるアクションを実行したりすることができます。

TypeScriptでは、JavaScriptと同じ構文を使うことができますが、静的型付けという利点があります。つまり、コンパイラはswitch文のcaseが評価される式の型と一致するかどうかをチェックし、一致しない場合はエラーをスローします。

TypeScript switch文の構文

以下は、TypeScriptにおけるswitch文の基本的な構文です。

switch (条件式) {
    case value1:
        // 条件式 == value1 のときに実行されるコード
        break;
    case value2:
        // 条件式 == value2 のときに実行されるコード
        break;
    ...
    default:
        // マッチしない場合に実行されるコード
}

式は評価され、各caseの値と比較されます。一致するものがあれば、そのcaseに関連するコードブロックが実行されます。マッチしない場合は、デフォルトに関連付けられたコードブロックが実行されます。

それでは、実際の例を見てみましょう。

let x: number = 3;

switch (x) {
    case 1:
        console.log("x is 1");
        break;
    case 2:
        console.log("x is 2");
        break;
    case 3:
        console.log("x is 3");
        break;
    default:
        console.log("x is not 1, 2, or 3");
}

// "x is 3"

この例では、変数xは数値として宣言され、switch文の中で評価されます。その値に基づいて、異なるケースが実行されます。

xが1の場合、最初のケースが実行され、コンソールに"x is 1"と表示されます。xが2の場合、2番目のケースが実行され、xが1,2,3以外の場合は、デフォルトのケースが実行されます。

TypeScript switch文のフォールスルー

注意すべきは、break文がcase句のコードブロックに存在しない場合、実行は次のcase句に継続されることです。これは、複数のcaseが同じコードを共有するフォールスルーと呼ばれる動作を実装するために使用することができます。

switch (day) {
    case "Monday":
    case "Tuesday":
    case "Wednesday":
    case "Thursday":
    case "Friday":
        console.log("Weekday");
        break;
    case "Saturday":
    case "Sunday":
        console.log("Weekend");
        break;
    default:
        console.log("Invalid day of the week");
}

このコードは、月曜日から金曜日まではWeekday、土曜日と日曜日はWeekendと出力します。

TypeScript switch文と列挙型

switch文と列挙型を組み合わせることもできます。それでは例を見てみましょう。

enum Size {
    Small, 
    Medium, 
    Large
};

let mySize: Size = Size.Medium;

function checkSize(size: Size): void {
    switch (size) {
        case Size.Small:
            console.log("The size is Small");
            break;
        case Size.Medium:
            console.log("The size is Medium");
            break;
        case Size.Large:
            console.log("The size is Large");
            break;
        default:
            console.log("Invalid size");
    }
}

checkSize(mySize) // "The size is medium"

この例では、3つのメンバを持つSizeという列挙型を定義します。

switch文では、変数mySizeが評価される式として使用されます。その値によって、異なるケースが実行されます。mySizeがSize.Mediumの場合、2番目のケースが実行され、The size is Mediumという文字列がコンソールに出力されます。

このように、switch文と組み合わせて列挙型を使用することで、コードの保守性と可読性を高め、ケースを比較する際に理解しやすく、ミスの少ないコードを作成することができます。

Note: switch文については、CS基礎/中級/制御フローで詳しく学習できます。

この記事を書いた人

著者の画像

Jeffry Alvarado

Ex-Facebook Engineer 大学ではコンピュータサイエンスを専攻し、在学中に複数のインターンシップを経験。コンピュータサイエンスが学習できるプラットフォームRecursionを創業し、CTOとしてカリキュラム作成、ソフトウェア開発を担当。


ツイート