为什么一元加号不具有绝对价值的含义?

时间:2013-03-20 23:37:43

标签: language-agnostic unary-operator

我已经看到很多关于为什么一元加号存在于特定语言中的问题,如:Why does F# have a unary plus operator?
What is the purpose of Java's unary plus operator?
What's the point of unary plus operator in Ruby?
Use of unary plus operator

并且他们都说'+'只是在你需要时才会超载,
或者用于执行一些罕见/不必要的语言特定任务 但为什么没有实际使用呢?

对于我来说,至少对我来说,一元“+”应该像绝对值一样:

int x = -5; //x is -5
x = +x;     //x is now 5

有没有具体的理由说明为什么没有这样做? 还是因为这只对我有意义?

1 个答案:

答案 0 :(得分:2)

没有这样实现,因为数学不能那样工作。

在数学中:

note: the following is math on a blackboard, not a programming language

+ -5 = -5

- -5 = 5

以任何其他方式这样做会让任何曾经完成高中学业的人感到困惑。

显然,上面的答案相当薄弱,因为你确实可以在代码中实现ASCII字符“+”所采取的操作,以便与数学不同。例如,在Lisp中,+运算符不像普通的高中数学那样工作:

;;; Adding two numbers:
+ 1 2

在TI计算器上,它甚至发生逆转:

1 2 +

您可能会认为以编程语言描述的方式实现+是有道理的。关于为什么不应该做的事情有很多不同的论点,包括最小惊喜的原则,一种语言应该对问题领域进行建模,这是我们在学校教过的东西等等。所有这些都是弱论点,因为他们不是提供机器以与数学相同的方式处理+的基本原因。

但事实上,人类是情感生物。我们喜欢熟悉和畏缩的东西,这与我们所教过的东西背道而驰。程序员不喜欢被+表现得与正常情况不同而感到惊讶。程序员是创建编程语言的人,因此他们按照他们的方式实现+是有意义的。

一个程序员可能不会这样想,或者只是一个小组,他们可以自由地创建一种以不同方式实现+的编程语言。但他们很难说服整个编程界他们所做的是对的。

因此,对+充当abs()的所有论据基本上都是弱的并不重要。只要大多数人认为它是正确的+将与常规数学相同。