恋に落ちるコード.js [技術系コメディ/短編/連載中]
This project is maintained by 8novels
「絵子、やる気スイッチを心ゆくまで押させてくれないか」
「何でだろう。セクハラにしか聞こえないのは何でだろう」
放課後、|情報処理《JS》部の部室。
|瀬尾絵子《せのおえこ》と|篠宮樹里《しのみやじゅり》の二人は相変わらず部活動に励んでいる。
「さて、今日はJavaScriptにおけるもう一つの条件分岐、switch文の話だ」
「あー、言ってたね、前回」
「switch文もif文と同様、条件式の評価に応じて処理を分岐したい時に使用する。ただし、分岐が多岐にわたる時にこそ、switch文はその真価を発揮する」
「まあ、二択だったらif文使え、っつー話だよね」
「switch文の動きは非常に単純だ。一つ目、上から順にcaseラベルに式が合致するかを評価し、|真《true》なら続く文を実行する。二つ目、break文に到達した時点で、switchブロックを抜ける。それだけだ」
「まあ、言っちゃうと確かにそれだけよねえ」
「では、よく使われる構文の例を提示してみよう」
var order;
switch (order) {
case "ソースカツ丼":
console.log("言わずと知れた福井のソウルフード。");
break;
case "玉子カツ丼":
console.log("福井でカツ丼といえばソースカツ丼を指すため、玉子カツ丼と明確に注文する必要がある。");
break;
case "上カツ丼":
console.log("福井では玉子カツ丼を上カツ丼と呼ぶこともある。上下関係を暗に認めている。");
break;
case "海鮮丼":
console.log("越前がにや若狭ふぐの乗った贅沢な丼が食欲をそそる。");
break;
default:
console.log("とりあえず腹に入れば何でもいい。");
}
「……お腹減ってるの? 樹里。パンかなんか買ってこようか?」
「いや、我慢する。この例の場合は、変数orderの値が、caseラベルの文字列と完全に一致した場合に直後の文を実行し、break文でswitchブロックを抜けるというパターンだ。非常によく使われる書き方だ」
「よく見るよねー」
「この例で特殊なのが最後のdefaultラベルだ。つまり、caseラベルのどれにも一致しなかった場合でも、この文は必ず実行される。もちろん、省略することも可能だ」
「絶対的守護神、って感じね」
「また、これはややトリッキーな記述法で賛否両論あるのだが……あえてbreak文を書かないことで、いくつかの条件に対して同じ文を実行する、という書き方もある。処理の流れが、すり抜けて落ちていくような様子からフォールスルー(fall through)と呼ばれる」
「フォールスルーって、落とされたりスルーされたり、なんかシンパシーを感じるわ。完全に字面のイメージだけで言ってるけど」
「ちなみにfall throughとは『失敗に終わる』という意味もあるそうだ」
「うん。なんかますます悲しくなってきた」
「とりあえず実例を挙げよう」
var order = "ソースカツ丼";
switch (order) {
case "ソースカツ丼":
case "玉子カツ丼":
case "醤油カツ丼":
console.log("とにかく今日は肉の気分。");
case "海鮮丼":
console.log("やっぱり魚もいいかも。");
}
「わかった。今日はもう切り上げようよ。ヨーロッパ軒行こ、ヨーロッパ軒」
ヨーロッパ軒とは、福井県内に展開する洋食店。日本で初めてソースカツ丼を提供した老舗として知られる。JavaScriptにはあまり関係がない。
「いや、もう少しなら我慢できる……で、この例は、3つの条件に対して同じ動作をさせるパターン。そして、break文を書き忘れたパターンだ」
「あ、これ確かに、カツ丼頼んだのに魚の気分にもなってるね」
「今だったら両方食べられるけどな。それはさておき、この場合は海鮮丼の前にbreak文を書かないと、意図通り動作しない」
「うん」
「break文をあえて書かない記述法がいまいち歓迎されないのは、要はバグの温床となる、というデメリットが大きいからだ。意図があるのか単に書き忘れなのか、瞬時に判断しにくいのだ。現に、フォールスルー自体を認めていない言語もある」
「用途に応じてうまく使えばいいと思うんだけどねー」
「そう。ただし、なぜこう言う書き方にしたのか、他人にも容易に理解してもらえるよう、明確なポリシーを持って書くことが大事だ。それができないのなら、素直な書き方をした方がいい」
「んー、その通りだわ。肝に銘じます」
「ついでなので、さらに悪い例を挙げておこう」
var order;
switch (order) {
default:
console.log("最初に書くことも出来るんやざ。");
break;
case "ソースカツ丼":
console.log("そんな事よりいっぺん食べてみねの。");
break;
}
「こんな風に、default節を最初に書いてもいい。ただし、評価される順番が変わるわけではなく、あくまで最後に評価される。文法としてはエラーにならないが、非常に読みにくいコードの例だ」
「それより突然の福井弁が気になるんだけど」
*
「さて、講義も終わったことだし、行こっか」
「ん?」
陽はだいぶ傾いてきた。部室の外からは、野球部の活気に満ちた声が聞こえてくる。
「だから、お腹減ってるんでしょ?カツ丼、食べに行こうよ」
「ああ、しかしだな」
樹里の返事には力強さがない。心なしか困ったような表情にも見える。
「どうしたの、いつものキレがないよ?」
「実を言うとだな、絵子よ」
樹里は目を伏せたまま、バツが悪そうに呟く。
「そういう、寄り道とか買い食いなどと言うことをしたことがなくてだな。どうしていいか、わからないのだ」
「えええっ!」
思わず身を乗り出す絵子。鞄からぶら下がったキーホルダーが大きく左右に揺れる。
「そんな女子高生、まだ居たんだ。その存在自体がシンタックスエラー吐くわよ」
「面目ない。そのカツ丼屋と言うのは、|一見《いちげん》さんが入っても大丈夫なのか? 一万円もあれば足りるのか?」
「どんだけ心配してんのよ……大丈夫、私がいるから。さ、樹里も早く帰り支度」
と絵子はMacBookの蓋を閉じる。
「青春はコードの中になかりけり、ってね。ほら、行くよ?」
と、樹里の手を引っ張る絵子。樹里は、やや照れ臭そうに頷いた。
*
「……で、何で最後は青春モノみたいに締めようとしたんだ?」
「いーじゃんよぉー、たまにはこういうのやってみたかったのよぉ、恥ずかしいからツッコまないで」