if-else 设计成语句而不是表达式,所以不能直接写 if cond { a } else { b }。如果设计成表达式,那将绝杀,可惜改不得。

开发者:我们想要更方便的语法!

设计者:不,你不想。

有张小龙那味了。

设计者认为有了三元运算符会让人写出难以理解的代码。但只要禁止三元运算符嵌套就行。这种程度的 lint 不至于做不出来,还会自然而然地逼开发者用表驱动(或者更多的if-else……)

模拟 if-else 的惰性求值需要用匿名函数,写一次要一大串字符,也不是不能用……

当 if-else 的两个分支都没有副作用,且计算开销很小时,完全可以自动优化成条件传送指令,抹掉分支。不过当分支能被准确预测时,这可能会变成负优化。三元运算符表达式相比 if-else 语句可能更容易触发优化,但不能保证对应到什么指令。直接说哪方性能更好的任何言论都是错的,要看实际编译结果和测试结果。

以上是对几个常见观点的评论。我更建议大家去看 Go 的相关 issue,相当有趣。