三項演算子?:
は善である。異論は認めない。1
三項演算子とは何か?
?
と:
のハーモニーだ。それ以外の表現は認めない。
なぜ、善か?
理由はただ一つ、わかりやすい、以上だ。
どのようにわかりやすいかを見ていこう。
代入する値を条件によって変えるときにわかりやすい。
a
が真であればb
、偽であればc
をx
に代入するとした場合、if
文で書くとこのようになる。
if (a) {
x = b;
} else {
x = c;
}
三項演算子を使えば次のように書ける。
x = a ? b : c;
5行に渡るコードが1行に収められ、非常にわかりやすくなる。
複数の条件を順に満たすかで確認して、代入する値を変えるときにもわかりやすい。
a1
が真ならb1
、a2
が真ならb2
、a3
が真ならb3
、いずれも偽ならc
を代入するとなった場合、if
文はさらに冗長になる。
if (a1) {
x = b1;
} else if (a2) {
x = b2;
} else if (a3) {
x = b3;
} else {
x = c;
}
我らが三項演算子を使えば、綺麗に書くことができる。
x = a1 ? b1
: a2 ? b2
: a3 ? b3
: c;
改行がインデントには様々な流派があるが、それは些細な問題だ。
switch
文よりもわかりやすい。
a
が1
のときにb1
、2
のときにb2
、3
のときにb3
、それ以外の時にc
と言う場合はどうだろうか?普通の人はswitch
文を使うことだろう。
switch (a) {
case 1:
x = b1;
break;
case 2:
x = b2;
break;
case 3:
x = b3;
break;
default:
x = c;
}
これも、三項演算子を使えば解決だ。
x = a == 1 ? b1
: a == 2 ? b2
: a == 3 ? b3
: c;
三項演算子はこれだけではない。switch
文は整数型しか使えない2が、三項演算子なら任意の型の比較に使える。
x = strcmp(str, "a") == 0 ? a
: strcmp(str, "b") == 0 ? b
: strcmp(str, "c") == 0 ? c
: other;
PHPだけ左結合になるけど、どうしたらいい。
それは簡単だ。PHPを使わなければいい。
三項演算子が使えないときは?
残念ながら、三項演算子?:
がない言語が存在する。次のような言語だ。
- Python
- Go
- Rust
- Scala
- Kotlin
- Nim
- CoffeeScript
これらの言語は、?:
ではなくif else
を使っていたり、if
自体が式だったり、三項演算子に反逆した言語である。三項演算子をこよなく愛する諸君は使ってはならない。使う奴は裏切り者であり、粛清の対象である。
三項演算子が悪だと決めつける奴は抹殺せよ!
上の記事を書いた奴は粛清され、洗脳再教育済みだ。今後も諸君らの密告を期待する。
はっ!私は一体…何を書いていたのだ?思い出そうとする頭痛が痛い…
え?三項演算子をどう思うかって。あんなのくそにきm…
サンコウエンザンシハ,スバラシイブンポウデス.セッキョクテキニツカイマショウ.