JavaScript と TypeScript における switch 文で同じコードを 2 つのケースで実行する方法
この場合、以下の 2 つの方法で実現することができます。
switch (value) {
case 1:
case 3:
console.log("値は 1 または 3 です");
break;
case 2:
case 4:
console.log("値は 2 または 4 です");
break;
default:
console.log("その他の値です");
}
上記の例では、value
が 1 または 3 の場合、console.log("値は 1 または 3 です");
が実行されます。同様に、value
が 2 または 4 の場合、console.log("値は 2 または 4 です");
が実行されます。
この方法は、コードを簡潔に記述できるという利点があります。
break 文を省略する
もう 1 つの方法は、break
文を省略する方法です。
switch (value) {
case 1:
case 3:
console.log("値は 1 または 3 です");
case 2:
case 4:
console.log("値は 2 または 4 です");
break;
default:
console.log("その他の値です");
}
上記の例では、value
が 1 または 3 の場合、console.log("値は 1 または 3 です");
が実行された後、console.log("値は 2 または 4 です");
も実行されます。これは、break
文が省略されているためです。
この方法は、2 つのケースで同じ処理を実行する必要がある場合に有効です。
注意点
break
文を省略する場合は、意図した処理が実行されていることを確認する必要があります。
function checkGrade(score) {
switch (score) {
case 90:
case 95:
case 100:
console.log("A です!");
break;
case 80:
case 85:
console.log("B です!");
break;
case 70:
case 75:
console.log("C です!");
break;
default:
console.log("F です...");
}
}
checkGrade(95); // 出力: A です!
checkGrade(82); // 出力: B です!
checkGrade(65); // 出力: F です...
function calculateDiscount(price, discountRate) {
switch (discountRate) {
case 10:
case 20:
console.log("割引後の価格は " + (price * (1 - discountRate / 100)) + " 円です。");
console.log("割引額は " + (price * discountRate / 100) + " 円です。");
break;
case 30:
console.log("割引後の価格は " + (price * (1 - discountRate / 100)) + " 円です。");
console.log("割引額は " + (price * discountRate / 100) + " 円です。");
console.log("さらに、クーポンが適用されます!");
break;
default:
console.log("割引率が無効です。");
}
}
calculateDiscount(1000, 10); // 出力: 割引後の価格は 900 円です。割引額は 100 円です。
calculateDiscount(1000, 30); // 出力: 割引後の価格は 700 円です。割引額は 300 円です。さらに、クーポンが適用されます!
calculateDiscount(1000, 50); // 出力: 割引率が無効です。
解説
例 1
checkGrade
関数は、学生の点数を引数として受け取り、その点数がどのグレードに相当するかを出力します。switch
文を使用して、点数を評価します。case 90
,case 95
,case 100
は、すべて A のグレードに対応します。これらの case に一致した場合、console.log("A です!");
が出力され、break
文によって switch 文から抜けます。default
ラベルは、上記のいずれの case にも一致しない場合に実行されます。この場合、console.log("F です...");
が出力されます。
例 2
calculateDiscount
関数は、商品の価格と割引率を引数として受け取り、割引後の価格と割引額を出力します。case 10
とcase 20
は、どちらも 10% と 20% の割引に対応します。これらの case に一致した場合、console.log("割引後の価格は " + (price * (1 - discountRate / 100)) + " 円です。");
とconsole.log("割引額は " + (price * discountRate / 100) + " 円です。");
が出力されます。その後、break
文によって switch 文から抜けます。case 30
は、30% の割引に対応します。この case に一致した場合、console.log("割引後の価格は " + (price * (1 - discountRate / 100)) + " 円です。");
と
最も基本的な方法は、ネストされた if 文を使用する方法です。
if (condition1) {
if (subCondition) {
// 共通の処理
}
} else if (condition2) {
if (subCondition) {
// 共通の処理
}
}
この方法は、条件構造が比較的単純な場合に有効です。しかし、ネストが深くなると、コードが複雑になり、読みづらくなるという欠点があります。
論理演算子
if (condition1 || condition2) {
// 共通の処理
}
この方法は、複数の条件が互いに排他的ではない場合に有効です。例えば、ある値が 10 または 20 の場合に処理を実行する場合などに使用できます。
関数
関数を作成して、共通の処理をカプセル化する方法もあります。
function commonFunction() {
// 共通の処理
}
if (condition1) {
commonFunction();
} else if (condition2) {
commonFunction();
}
この方法は、共通の処理が複雑な場合に有効です。また、コードを再利用しやすくすることができます。
オブジェクト
オブジェクトを使用して、条件と処理を関連付ける方法もあります。
const conditions = {
condition1: {
subCondition: true,
action: commonFunction
},
condition2: {
subCondition: false,
action: commonFunction
}
};
if (conditions[condition].subCondition) {
conditions[condition].action();
}
この方法は、条件と処理の組み合わせを柔軟に定義したい場合に有効です。
配列
const conditions = [
{ condition: condition1, subCondition: true, action: commonFunction },
{ condition: condition2, subCondition: false, action: commonFunction }
];
for (const condition of conditions) {
if (condition.subCondition) {
condition.action();
}
}
javascript typescript switch-statement