【入門編】 noFallthroughCasesInSwitchによる制御フローの厳格化 – TypeScript実践ガイド

こんにちは!TypeScriptの世界へようこそ。
フロントエンドの最前線でコードと格闘していると、時々「えっ、なんでそんな動きになるの!?」と頭を抱えたくなるようなバグに出会うことがあります。

その中でも、初心者の頃に誰もが一度は冷や汗をかくのが「switch文のフォールスルー問題」です。今日は、TypeScriptの設定ファイル(`tsconfig.json`)にある、ちょっと地味だけど実はめちゃくちゃ頼りになる設定、`noFallthroughCasesInSwitch`についてお話ししますね。

—

1. そもそも「フォールスルー」って何?

まずは、想像してみてください。あなたは今、回転寿司屋さんにいます。

お皿が流れてきて、あなたはこう考えます。
「マグロが来たら醤油をかける。サーモンが来たらレモンを絞る。」

ここで、もしあなたが「マグロ」を取ったのに、そのまま醤油をかけ忘れて、隣の「サーモン用のレモン」まで自動的に絞ってしまったらどうでしょう? 「えっ、マグロにレモンかけちゃったの!?」ってパニックになりますよね。

プログラミングの世界の`switch`文もこれと同じです。

let sushi = “マグロ”;

switch (sushi) {
case “マグロ”:
console.log(“醤油をかける”);
// ここで「終わり!」と言わないと、下のコードまで実行されちゃう!
case “サーモン”:
console.log(“レモンを絞る”);
break;
}

このコードを実行すると、マグロなのに「醤油をかける」のあとに、なぜか「レモンを絞る」まで実行されてしまいます。これが「フォールスルー(すり抜け)」です。

本来ならマグロを食べ終わったら店を出る(`break`する)べきなのに、隣のレーンにズルズルと滑り込んでしまう。これがバグの温床なんです。

—

2. 救世主 `noFallthroughCasesInSwitch` の登場

「いちいち`break`を書くのを忘れないように気をつければいいじゃないか!」と思うかもしれません。でも、人間だもの、ミスはあります。特にコードが長くなると、うっかり書き忘れることなんて日常茶飯事です。

そこで、TypeScript先生にこうお願いしましょう。
「もし`break`を書き忘れていたら、コンパイルすらさせずに警告を出して!」

これが `tsconfig.json` に設定する `noFallthroughCasesInSwitch: true` です。

設定のやり方

プロジェクトのルートにある `tsconfig.json` を開いて、`compilerOptions` の中に一行追加するだけです。

{
“compilerOptions”: {
“noFallthroughCasesInSwitch”: true,
// 他の設定項目…
}
}

これだけで、TypeScriptはあなたのコードを厳しくチェックしてくれます。「おっと、ここ`break`忘れてるよ!」と、エディタ上で赤く波線を引いて教えてくれるようになるんです。これ、めちゃくちゃ安心感ありませんか?

—

3. 「わざと」すり抜けさせたい時はどうするの?

とはいえ、実務では「マグロでもサーモンでも、とりあえずわさびは追加したい」というような、あえてフォールスルーさせたいケースもゼロではありません。

そんなときは、こうやって書いてあげてください。

let sushi = “マグロ”;

switch (sushi) {
case “マグロ”:
// わざとフォールスルーさせる場合は、コメントで明記する!
// TypeScriptは「あ、意図的なんだな」と理解してくれます。
/ falls through /
case “サーモン”:
console.log(“わさびを追加する”);
break;
}

このように `/ falls through /` というコメントを書いておけば、TypeScript先生も「なるほど、意図的なすり抜けですね。了解しました!」と納得してくれます。ルールを守りつつ、柔軟性も持たせる。これが大人のプログラミング術です。

—

最後に:完璧を目指さなくて大丈夫

プログラミングを始めたばかりの頃は、「設定項目が多すぎて覚えるのが大変…」と圧倒されてしまうかもしれません。でも、全部を一度に覚える必要なんてないんです。

今日紹介した `noFallthroughCasesInSwitch` も、「自分のうっかりミスを、仕組みでカバーする」という考え方の一つです。

TypeScriptは、あなたの書いたコードを冷たく突き放すための道具ではありません。むしろ、あなたが安心してコードを書けるようにサポートしてくれる「優秀な副操縦士」のような存在です。

エラーが出ても「またTypeScript先生が守ってくれた!」とポジティブに捉えて、一歩ずつ進んでいきましょう。大丈夫、その小さな積み重ねが、いつかあなたを素晴らしいエンジニアに育ててくれますよ。

それでは、良いコーディングライフを!

コメント

タイトルとURLをコピーしました