什么是 C 的三元运算符的惯用 Go 等价物?

在 C/C++(以及该家族的许多语言)中,根据条件声明和初始化变量的常用习惯用法使用三元条件运算符:


int index = val > 0 ? val : -val

Go 没有条件运算符。实现与上面相同的代码段的最惯用的方法是什么?我来到了以下解决方案,但似乎很冗长


var index int


if val > 0 {

    index = val

} else {

    index = -val

}

有什么更好的吗?


MYYA
浏览 237回答 3
3回答

繁花不似锦

正如所指出的(并希望不出所料), usingif+else确实是在 Go 中执行条件的惯用方式。但是,除了完整var+if+else的代码块之外,这种拼写也经常使用:index := valif val <= 0 {&nbsp; &nbsp; index = -val}如果您有足够重复的代码块,例如相当于int value = a <= b ? a : b,您可以创建一个函数来保存它:func min(a, b int) int {&nbsp; &nbsp; if a <= b {&nbsp; &nbsp; &nbsp; &nbsp; return a&nbsp; &nbsp; }&nbsp; &nbsp; return b}...value := min(a, b)编译器会内联这些简单的函数,所以它更快、更清晰、更短。

慕的地10843

No Go 没有三元运算符,使用 if/else 语法是惯用的方式。为什么 Go 没有 ?: 运算符?Go 中没有三元测试操作。您可以使用以下方法来获得相同的结果:if&nbsp;expr&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;trueVal}&nbsp;else&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;n&nbsp;=&nbsp;falseVal}?:Go 不存在的原因是语言的设计者已经看到该操作过于频繁地用于创建难以理解的复杂表达式。的if-else形式,虽然较长,无疑是更清晰。一种语言只需要一个条件控制流结构。— 常见问题 (FAQ) - Go 编程语言

汪汪一只猫

假设您有以下三元表达式(在 C 中):int a = test ? 1 : 2;Go 中惯用的方法是简单地使用一个if块:var a intif test {&nbsp; a = 1} else {&nbsp; a = 2}但是,这可能不符合您的要求。就我而言,我需要一个代码生成模板的内联表达式。我使用了一个立即评估的匿名函数:a := func() int { if test { return 1 } else { return 2 } }()这确保不会同时评估两个分支。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go