73
42

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 5 years have passed since last update.

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

Last updated at Posted at 2014-08-31

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

73
42
5

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
73
42

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?