Это не реализовано таким образом, потому что математика так не работает.
В математике:
note: the following is math on a blackboard, not a programming language
+ -5 = -5
- -5 = 5
Любой другой способ запутает любого, кто когда-либо заканчивал среднюю школу.
Очевидно, что приведенное выше является довольно слабым ответом, поскольку вы действительно можете реализовать действие, выполняемое символом ASCII «+» в коде, чтобы оно работало иначе, чем математика. Например, в Лиспе оператор +
работает не так, как обычная школьная математика:
;;; Adding two numbers:
+ 1 2
А на калькуляторах TI даже наоборот:
1 2 +
Вы можете возразить, что реализация +
так, как вы описываете в вашем языке программирования, имеет смысл. Существует множество различных аргументов, почему этого делать не следует, в том числе принцип наименьшего удивления, язык должен моделировать проблемную область, это то, чему нас учили в школе и т. д. Все они по существу слабые аргументы, потому что они не не дают фундаментальной причины для того, чтобы машина относилась к +
так же, как к математике.
Но вот в чем дело, люди эмоциональные существа. Нам нравится то, что знакомо, и настораживает то, что идет вразрез с тем, чему нас учили. И программисты не любят, когда +
ведут себя иначе, чем обычно. А программисты — это те, кто создает языки программирования, поэтому вполне логично, что они реализуют +
именно так, как они это делают.
Один программист или небольшая группа могут так не думать, и они могут создать язык программирования, реализующий +
по-другому. Но им будет трудно убедить сообщество программистов в том, что они поступили правильно.
Так что не так уж важно, что все аргументы, которые можно привести против +
, действующего как abs()
, по существу слабы. Пока большинство считает, что это правильно, +
будет вести себя так же, как обычная математика.
person
slebetman
schedule
21.03.2013