1. Qiita
  2. 投稿
  3. Go

Goには三項演算子a?b:cはない ―― 代わりの書き方

  • 23
    いいね
  • 5
    コメント
この記事は最終更新日から1年以上が経過しています。

Goには三項演算子?:は存在しない。Cの派生言語(C++とかJava)だと三項演算子はわりと頻繁に使われるものだと思う。三項演算子を使いたいところでGoではどう書けばいいのか戸惑うことがあると思うので、三項演算子の代わりの書き方を紹介したい。

x := 0
if condition {
    x = 1
}

上記のコードはx := condition ? 1 : 0と同じだ。デフォルトの値がリテラルの数値や文字列などの計算にコストがかからないものであれば、上のパターンを使うのが普通だと思う。

もしデフォルトの値が関数呼び出しの結果などで、その値を得るコストが高い場合、デフォルト値を得てから再度上書きするのは無駄が多い。そういう場合には下のように書くしかない。

var x XTtype
if condition {
    x = ifTrue()
} else {
    x = ifFalse()
}

5行になるのは残念だと思うかもしれないし、私も多少そう思うが、これがGoの書き方なので、この点については諦めるほうがよい。