运算符重载有什么实际用途?感觉很鸡肋

12 天前
 seekseat

看到很多人在讨论...但这玩意有啥作用,工作这么多年完全没 get 到

4667 次点击
所在节点    Go 编程语言
53 条回复
nino
12 天前
对写 DSL 和 库的人才有意义,能让 API 更语义化,或者语句更像数学公式
cwek
12 天前
"语句更像数学公式",就是这个。
hanxiV2EX
12 天前
golang 要支持了吗?
echo1937
12 天前
mainjzb
12 天前
实现矩阵相乘 ,相加
result := a1 * a2 + a3
而不是
result := sum(mul(a1, a2) , a3)

比如连接
result := s1 + s2
而不是
result := strings.append(s1, s2)

比如实现一个 @ 代替 must( func f() ) 来简化错误处理
result := @runServer()
而不是
result := must(runServer())

比如检测一堆向量是否能形成环
sum := vector(0,0)
for _,v := range vs{
sum += v
}
if sum == vector(0,0) {
// 形成了环
}

而不是

sum := vector(0,0)
for _, v:= range vs{
sum = vectors.add(sum, v)
}
if sum.x == 0 && sum.y == 0 {
// 形成了环
}
laminux29
12 天前
举个更简单的例子,无论 C++、Java 、C#、Python ,大家都喜欢用 Class 或 Struct 。这玩意本质上来说,就是对基础数据结构的包装,或者说是语法糖。如果没有 Class 、Struct ,你自己得用一大堆基础数据结构的数组或 List ,来自行管理这些玩意,于是,这个问题,就转换为:

Class 、Struct 有什么实际用途?
Ayanokouji
12 天前
运算符重载 我只佩服 kotlin
xgdgsc
12 天前
Sawyerhou
12 天前
举个栗子

Python 里 pathlib 拼接路径,
不必用+,不必用 join ,用/

dir / "stem.csv"

非常直觉,高效又易读,
每次我用到都感慨这个重载太漂亮了。
PopRain
12 天前
第一次用 Java , 被 BigDecimal interest = loanAmount.multiply(interestRate) 震惊了。。。。。
ty29022
12 天前
@Sawyerhou 这个我认为恰恰是个反面例子
在我看来编程语言中 / 就是除法,读出来是除法,做的事情也该是除法
这和向量和矩阵操作这种符合数学直观逻辑的用法很不一样
不过这很 python 就是了,个人感觉 python 总是做一些自以为”自然“的事情
wlingxiao
12 天前
建议看看 scala ,体会下操作符满天飞的感觉。
cmdOptionKana
12 天前
确实很鸡肋,实用性不强,主要用途是耍帅。
GeruzoniAnsasu
12 天前
@ty29022
那 numpy 重载切片运算符倒确实还挺自然的
shintendo
12 天前
@ty29022 我感觉 python 的三目也有点……
masterclock
12 天前
没有操作符重载写点计算的东西简直就是折磨啊
wxf666
12 天前
@ty29022 #11 为嘛 / 只能是除法的意思,而不能是分隔符呢?(比如斜杠青年)

那同理,字符串拼接,也不该用 +,而是像拼接矩阵那样,[str1 str2 str3] ?

wxf666
12 天前
@PopRain #10 有没有 greaterEqualThan() 啥的。。

还是叫 greaterThanOrEqualTo()。。

Sawyerhou
12 天前
@ty29022 重载运算符跟语言没有关系,支持重载都可以用/拼接路径。

做数学的应该都知道符号是非常不够用的,符号在不同域下定义不一样很正常,
*在初等数学里是乘法,高等里就是卷积了。

而且路径的对象类型不属于数学对象,没有除法
就像,C++里面 IO 流用<<和>>,IO 本身也没有比较大小的必要。
newtype0092
12 天前
想想确实除了在学校里课上花了好大功夫学了一番,实际工作中并没有怎么用上过。

每次想实践一下,总觉得我写的那些东西还不配让别人迁就我来适应一个新的运算符用法,老老实实 function 加参数就好。

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

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

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

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

© 2021 V2EX