Почему Java не имеет составных версий присвоения условного выражения - и и условного выражения - или операторы? (&& =, || =)

Я думаю, что необходимо редко быть нужен тег br в шаблонах. Но время от времени это может требоваться в содержании, пользователь генерировал и генерируемый системой. Как то, если Вы хотите сохранить часть текста в абзаце, но нуждаться в новой строке перед ним.

, Каковы случаи, где Вы чувствуете, Вы вынуждены использовать теги br?

77
задан polygenelubricants 22 March 2010 в 13:47
поделиться

8 ответов

Это так в Java, потому что это так в C.

Теперь вопрос, почему это так в C, потому что когда & и && стали другими операторов (когда-то предшествовавших происхождению C от B), разнообразие операторов & = было просто упущено.

Но во второй части моего ответа нет источников, подтверждающих это.

9
ответ дан 24 November 2019 в 11:02
поделиться

Одна из исходных целей Java заключалась в том, чтобы быть «Простым, объектно-ориентированным и знакомым». Применительно к этому случаю & = знакомо (у C, C ++ он есть, и в этом контексте слово «знакомый» означает знакомый для кого-то, кто знает эти два).

&& = не было бы знакомо, и это было бы непросто в ощущение, что разработчики языка не пытались продумать каждый оператор, который они могли бы добавить к языку, поэтому меньше дополнительных операторов проще.

4
ответ дан 24 November 2019 в 11:02
поделиться

Вероятно, потому что что-то вроде

x = false;
x &&= someComplexExpression();

выглядит так, как будто оно должно быть присвоено x и вычислено someComplexExpression () , но тот факт, что оценка зависит от значение x не очевидно из синтаксиса.

Также потому, что синтаксис Java основан на C, и никто не видел острой необходимости добавлять эти операторы. В любом случае, вам, вероятно, будет лучше с оператором if.

16
ответ дан 24 November 2019 в 11:02
поделиться

« & » и « && » не то же самое, что « && » - это сокращенная операция, которая будет не делать, если первый операнд ложный, в то время как ' & ' будет делать это в любом случае (работает как с числом, так и с логическим).

Я согласен с тем, что существование имеет больше смысла, но не так уж плохо если его там нет. Думаю, его там не было, потому что его нет в C.

На самом деле не могу понять, почему.

2
ответ дан 24 November 2019 в 11:02
поделиться

Это разрешено в Ruby.

Если бы я догадался, я бы сказал, что он не часто используется, поэтому не был реализован. Другое объяснение может заключаться в том, что парсер смотрит только на символ до =

0
ответ дан 24 November 2019 в 11:02
поделиться

Я не могу придумать лучшей причины, чем «Это выглядит невероятно уродливо!»

0
ответ дан 24 November 2019 в 11:02
поделиться

a & b и a && b - это не одно и то же.

a && b - это логическое выражение, которое возвращает логическое значение, а a & b - побитовое выражение, возвращающее int (если a и b - это целые числа).

Как вы думаете, где они одинаковые?

-1
ответ дан 24 November 2019 в 11:02
поделиться

Во многом потому, что синтаксис Java основан на C (или, по крайней мере, на семействе C), а в C все эти операторы присваивания компилируются в арифметические или побитовые инструкции сборки в одном регистре. Версия с оператором присваивания избегает временных затрат и, возможно, позволила создать более эффективный код на ранних неоптимизирующих компиляторах. Эквиваленты логических операторов (как их называют в C) ( && = и || = ) не имеют такого очевидного соответствия одиночным инструкциям сборки; они обычно расширяются до тестовой и переходной последовательности инструкций.

Интересно, что в таких языках, как ruby ​​, есть || = и && =.

Изменить: терминология в Java и C различается

4
ответ дан 24 November 2019 в 11:02
поделиться
Другие вопросы по тегам:

Похожие вопросы: