2013-03-20 8 views
0

Across Я видел много вопросов о том, почему унарный плюс существует в определенном языке, как:
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 

Есть ли какие-либо конкретные причины, почему это не было сделано?
или это потому, что это имеет смысл только для меня?

+2

Ваше предложение не математически ...и унарный плюс фактически что-то делает на некоторых языках. Например, в Java он может выполнять преобразование типа. – assylias

+0

Потому что это имеет другое значение, и с 1957 года оно имеет тот же смысл во всех языках программирования. Слишком поздно придумывать яркие идеи. Не конструктивный. – EJP

ответ

2

Это не реализовано так, потому что математика не работает таким образом.

В математике:

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

+ -5 = -5 

- -5 = 5 

Действовать любым другим способом будет запутать любого, кто когда-либо закончил Highschool.

Очевидно, что это довольно слабый ответ, так как вы действительно можете реализовать действие, принятое символом ASCII «+» в коде, чтобы работать иначе, чем математика. В Лиспе, например, оператор + не работает как обычная лицейная математика:

;;; Adding two numbers: 
+ 1 2 

А на калькуляторах TI, это даже наоборот:

1 2 + 

Можно утверждать, что реализация + так, как вы описали в ваш язык программирования имеет смысл. Существует множество различных аргументов о том, почему это не должно быть сделано, включая принцип наименьшего удивления, язык должен моделировать проблемную область, это то, чему нас учили в школе и т. Д. Все они по сути являются слабыми аргументами, поскольку они не 't является основополагающей причиной для обработки машины + так же, как математика.

Но вот что, люди - эмоциональные существа. Нам нравится то, что знакомо, и съеживается на что-то, что противоречит чему-то, чему нас учили. И программистам не нравится удивляться, что они ведут себя по-другому от обычного. И программисты - это те, кто создает языки программирования, поэтому имеет смысл, что они реализуют + так, как они это делают.

Один программист может не так думать или небольшая группа, и они могут свободно создавать язык программирования, который реализует + по-разному. Но им будет трудно убедить сообщество программирования в целом, что они сделали правильно.

Поэтому не имеет значения, что все аргументы, которые могут быть сделаны против +, действующих как abs(), по существу слабы. Пока большинство чувствует, что это правильно, + будет вести себя так же, как обычная математика.

 Смежные вопросы

  • Нет связанных вопросов^_^