三項演算子?:は善である。異論は認めない。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…
サンコウエンザンシハ,スバラシイブンポウデス.セッキョクテキニツカイマショウ.