最受不了的就是 golang 中的 if...else 语句了

230 天前
 zhwguest

代码密度太低了,经常要这么写:

1: var val string
2: if ok {
3:	val = "okay"
4: } else {
5:	val = "fail"
6: }

即使优化一下,还有:

1: val := okay
2: if !ok {
3:	val = "fail"
4: }

要是 kotlin,swift, java, c++, c ,来得多快啊,尤其很多个这种条件初始赋值的时候,看版面,就像在搞笑似的。

9374 次点击
所在节点    Go 编程语言
92 条回复
Leviathann
230 天前
@doraemonki var val string 和下面的两处 val =,都属于无必要又增实体
doraemonki
230 天前
@Leviathann 从 Go 语言的设计哲学出发考虑,引入三元表达式增加的复杂度远超带来的收益,增加了理解难度还带来了代码风格的问题(深度嵌套的写法一定会出现),普通的 if else 是最常用的写法,足够简洁,即使是初学者也能一眼看懂
fregie
230 天前
代码密度高不一定是好事,越是简化的高级语法越难读,项目规模上来后简直是灾难
满屏的高度浓缩三元表达不头疼吗
xiaoyecreate
230 天前
学会与自己和解,不要在意这些细节,能解决问题就可以了
extrem
230 天前
总结一下就是,引入一般的三目运算符会导致在很多场景下与当前“go 哲学”相悖的用法出现,弊大于利,而在当前的计算机语言演进道路上又没有找到更好的办法了,所以索性维持现状
extrem
230 天前
我之前也经常要吐槽但后来发现确实是没办法,这些软件构建的基础设施的设计要考虑的比让我们不爽的点多得多,所以少即使多,没有完美的语言只有完美的选择
proxytoworld
230 天前
没有三目运算符确实难受
LaTero
230 天前
@extrem 有更好的方法呀,把 if 从 statement 改成 expression 就行,很多现代语言都支持类似这样的:
var v = if (pred) a else b
ixixi
230 天前
不喜欢就不要用,干嘛委屈自己
zgcwkj
230 天前
你是想说没有**三目运算符**?
lekai63
230 天前
比较适合“按代码行数算绩效”的公司使用 🐶
victorc
230 天前
你去用两天 rust
回来看 go 哪哪都好
sealinfree
230 天前
改写为 go 的形式

// When 三元表达式
func When[T any](Check bool, TrueVal, FalseVal T) T {
if Check {
return TrueVal
} else {
return FalseVal
}
}
sealinfree
230 天前
使用效果 aaa := When(1 == 1, 1, 2)
aaa 值为 1
sagaxu
230 天前
@sealinfree
@seth19960929

cond ? func1() : func2()

自己封装的 When 具有短路效果吗?到达不了的分支不要计算
redbule
230 天前
如果你觉得不优雅,那么只有 pattern match 能满足你了。
bzj
230 天前
没看懂有什么问题
bzj
230 天前
你应该就属于那种认为 PHP 是全世界最好语言的群体
IvanLi127
230 天前
@victorc 这事我干过,现在爱上了 rust🥰,看 go 不顺眼了
sch1111878
230 天前
@youyouzi 你平时不用 value ? 1 : 2 吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1106223

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX