search
LoginSignup
41

More than 5 years have passed since last update.

posted at

updated at

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

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の書き方なので、この点については諦めるほうがよい。

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
What you can do with signing up
41