Давайте поговорим о двух зарезервированных, но неиспользуемых ключевых словах языка Java — const
и goto
. Почему они не используются? Как я понял const
можно заменить на public static final
, но как быть с goto
?
Многа букав: const
и goto
перешли из C++. Ключевым словам не нашли применения в Java. Функции, которые они выполняют в C++, в Java реализованы по-другому.
Исторически синтаксис Java основан на C++, поэтому разработчики приняли решение зарезервировать ряд ключевых слов C++, чтобы:
Таким образом вопрос сводиться к следующему: «Есть ли в Java необходимость в const
и goto
и что они должны делать?»
Одно из предложений ввести const
по аналогии с C++ можно посмотреть по ссылке:
JDK-4211070 : Java should support const parameters (like C++) for code maintainence
Предложение было закрыто в 2005 году. По ссылке можно посмотреть разбор, в выводах которого отмечаются проблемы, связанные вводом const
:
Adding const is too late now. Had this been added from 1.0, the situation could have been different.
Const pollution: the C++ approach requires all const methods to be marked with a const keyword. This means that most methods will have to be marked const explicitly. This tend to clutter all methods in C++.
Compatibility is a very important feature of the JDK. Arguably, the collection classes should be modified to indicate that the
elements are const. That would require all existing implementations
to be updated in the same way, effectively breaking all existing
non-JDK implementations of the collection interfaces. Similarly,
hashCode would have to be const, breaking the current implementation
of String.
Создание константных переменных/полей в Java уже обеспечивается с помощью final
. Ввод механизмов из C++ посчитали неоправданным.
У goto
плохая репутация (см. «Go To Statement Considered Harmful» Дейкстры). В Java имеются альтернативные операторы перехода: break
, continue
, return
, которые покрывают большую часть области применения. Единственный довод в пользу goto
состоит в том, что в отдельных случаях использование goto
позволяет упростить код. По-видимому, сторонники goto
не смогли оказать достаточного влияния на разработчиков, чтобы добавить новое ключевое слово.
Похожие обсуждения в англиской версии:
goto
считается "плохим оператором", ухудшает читаемость и увеличивает запутанность кода, порождает трудноподдерживаемый "спагетти-код" (также нарушает очень важные концепции программирования, можно ознакомиться по ссылке в конце ответа).
Некоторые серьезные люди считают, что ему нет места в языках программирования, и пишут об этом целые книги. Так вот, пока кто-то говорит об этом, создатели Java - делают. Они искренне считают, что без безусловного перехода мир станет чуточку добрее, и по совокупности проблем и преимуществ с ними можно согласиться. Подробнее
Само же слово было зарезервировано на этапе создания языка, перекочевав из других популярных в то время. Так и болтается до сих пор...
PS: в Java все же есть безусловные переходы, реализуемые через операторы break
и continue
с метками. Как часто вы ими пользовались и знали ли об этой возможности вообще (это по поводу нужности этого оператора)?
Например они могут не использовать, но быть в языке, как задел на будущее, что бы в последующих версиях можно было легко добавить этот оператор и не пересечься с названием переменных/объектов в уже написанном(Legacy) на старой версии языка коде.
В JavaScript, вроде, такая же практика.
Касательно const
, который можно заменить public static final
:
Ничего не мншает разработчикам JAVA в будущем реализовать const и добавить так называемых "синтаксический сахар", когда можно делать и так и так, и в итоге программа будет одинаково выполняться.
Например, в C# много синтаксического сахара:
Использую в своём приложении векторные кнопки(social) но они используются от 5-ой версии и выше, и вот незадача, моё приложение использует устройства...
Есть метод, который возвращает тип double, к примеру 313141 и тд
У меня есть обработчик, где поступают 4 байта и они превращаются в int, но эта схема не работает с float, потому что нет по битового сдвигаПомогите...
увидел такую возможность в es проводнике settings/display/usb plug-in message