13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

三項演算子?:は善である。

Last updated at Posted at 2020-03-19

三項演算子?:は善である。異論は認めない。1

三項演算子とは何か?

?:のハーモニーだ。それ以外の表現は認めない。

なぜ、善か?

理由はただ一つ、わかりやすい、以上だ。

どのようにわかりやすいかを見ていこう。

代入する値を条件によって変えるときにわかりやすい。

aが真であればb、偽であればcxに代入するとした場合、if文で書くとこのようになる。

if (a) {
    x = b;
} else {
    x = c;
}

三項演算子を使えば次のように書ける。

x = a ? b : c;

5行に渡るコードが1行に収められ、非常にわかりやすくなる。

複数の条件を順に満たすかで確認して、代入する値を変えるときにもわかりやすい。

a1が真ならb1a2が真ならb2a3が真なら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文よりもわかりやすい。

a1のときにb12のときにb23のときに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自体が式だったり、三項演算子に反逆した言語である。三項演算子をこよなく愛する諸君は使ってはならない。使う奴は裏切り者であり、粛清の対象である。

三項演算子が悪だと決めつける奴は抹殺せよ!

三項演算子?:は悪である。 - Qiita

上の記事を書いた奴は粛清され、洗脳再教育済みだ。今後も諸君らの密告を期待する。


はっ!私は一体…何を書いていたのだ?思い出そうとする頭痛が痛い…

え?三項演算子をどう思うかって。あんなのくそにきm…

サンコウエンザンシハ,スバラシイブンポウデス.セッキョクテキニツカイマショウ.

  1. 批判のコメントは受け付けない。誤字脱字以外の編集リクも受け付けない。

  2. Java 7以上はswitch文で文字列比較もできるが、互換性を重視する諸君なら、Java 6以下互換のコードにするために文字列比較などしないと信じている。なお、JavaScriptは変数に型が無いので問題ないものとする。

13
3
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?