我是否应该更喜欢运算符重载函数/方法?

时间:2015-11-24 06:15:27

标签: swift algorithm operator-overloading

我觉得使用运算符重载会给代码增加不必要的复杂性和模糊性。

在实际情况下,它是否有利于使用自定义运算符或重载现有运算符而不是使用函数或对象方法?

它是定期使用还是更多只是一个有趣的异国情调的东西来增加一种语言更加时髦?

2 个答案:

答案 0 :(得分:0)

来自wiki的

运算符重载 - 通常称为运算符ad hoc多态 - 是多态的一个特定情况,其中不同的运算符根据其参数具有不同的实现

斯威夫特有超过40个运营商,所有运营商都超载,我们在常规基地使用它们。你更喜欢让sum = value.plus(anotherValue)而不是sum = value + anotherValue ??我相信你没有!如果值是符合协议Equatable的自定义类型,则==运算符必须超载,我们会定期执行。

使用自定义运算符(如±,< *>等等)是否是个好主意?在那个领域,我不确定。我不喜欢这个......

重载+运算符除了总和以外的其他东西是一个好主意吗?不,绝对不是!

答案 1 :(得分:0)

超载的主要原因是使用具有数学或逻辑背景的自定义class的舒适度

像:

  • 载体
  • 矩阵
  • 复数
  • 相量,张量,四元数,...
  • 有限字段
  • 大数字(arbnum,biginteger,bigdecimal ......)
  • 自定义精确浮动和固定格式
  • 谓词,布尔,模糊和概率
  • 字符串,列表疑问句
  • 以及更多

如果编码正确,您可以直接编写数学方程式而无需转换为函数调用集。对于操作员来说,阅读和理解数学代码更简单直接。

有时甚至非严格的数学类也以这种方式使用,例如图像或信号。在 DIP / CV 中,通常会对这些方程应用数学/物理方程,而重载运算符会使这更简单。

对于非数学课程

运算符通常是无用的/无意义的(如您所愿),除了特殊的operator=,这对于具有动态分配成员的任何class/struct都是至关重要的。没有它,std:vector<>之类的东西将无法正常工作。

另一个例子是比较运算符,有时为非数学类实现,以便更容易排序。