1. ホーム
  2. 行く

[解決済み】C言語の三項演算子に相当するGoの慣用句は何ですか?

2022-03-24 01:34:03

質問

C/C++(およびその系列の多くの言語)では、条件によって変数を宣言し初期化する一般的なイディオムとして、三項条件演算子を使用します。

int index = val > 0 ? val : -val

Goには条件演算子がありません。上記のコードと同じものを実装する最も慣用的な方法は何でしょうか?私は次のような解決策にたどり着きましたが、かなり冗長なようです。

var index int

if val > 0 {
    index = val
} else {
    index = -val
}

何か良い方法はないでしょうか?

解決方法は?

指摘されているように(当然といえば当然なのですが)、このような場合に使用するのが if+else は、確かに 慣用法 を実行します。

本格的な var+if+else というブロックがありますが、このスペルもよく使われます。

index := val
if val <= 0 {
    index = -val
}

に相当するような、十分に繰り返しのあるコードブロックがある場合。 int value = a <= b ? a : b それを保持するための関数を作成することができます。

func min(a, b int) int {
    if a <= b {
        return a
    }
    return b
}

...

value := min(a, b)

コンパイラはこのような単純な関数をインライン化するので、高速で、よりわかりやすく、短くすることができます。