0

全体で、単項プラスが特定の言語で存在する理由について多くの質問を見てきまし
た。F#に単項プラス演算子があるのはなぜですか。
Javaの単項プラス演算子の目的は何ですか?
Rubyの単項プラス演算子のポイントは何ですか?
単項プラス演算子の使用

そして、「+」は、必要な場合にのみオーバーロードするためのもの、
またはまれな/不要な言語固有のタスクを実行するためのものであると言われています。
しかし、なぜ実際に使用されていないのでしょうか。

単項'+'が次のような絶対値として機能することは(少なくとも私にとっては)理にかなっています。

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

これが行われなかった特定の理由はありますか?
それとも、これは私にとってしか意味がないからですか?

4

1 に答える 1

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 +

+プログラミング言語で説明した方法を実装することは理にかなっていると主張することができます。最小驚きの原則、言語は問題領域をモデル化する必要がある、それは学校で教えられてきたことなどを含む、なぜそれを行うべきではないかについては、さまざまな議論があります。それらはすべて本質的に弱い議論です。機械が+数学と同じように扱う根本的な理由はありません。

しかし、ここで問題なのは、人間は感情的な生き物です。私たちは慣れ親しんだものが好きで、教えられたことに反するものにはうんざりします。+また、プログラマーは通常とは異なる振る舞いに驚かされることを好みません。+そして、プログラマーはプログラミング言語を作成する人なので、彼らが自分たちのやり方で実装するのは理にかなっています.

1 人のプログラマーや小さなグループはそのように考えないかもしれませんが、彼らは実装+の異なるプログラミング言語を自由に作成できます。しかし、プログラミング コミュニティ全体に自分たちの行動が正しかったと納得させるのは難しいでしょう。

+したがって、アマチュアとして行動することに反対することができるすべての議論abs()が本質的に弱いことはそれほど重要ではありません. 大多数が正しいと感じている限り、+通常の数学と同じように動作します。

于 2013-03-21T02:05:38.823 に答える