Одной из предлагаемых функций Java 7 Project Project Coin была «Оператор Элвиса». Отчет о 2009 JavaOne презентации по проекту Coin описал его как таковой:
Одной из «мелких особенностей», рассматриваемых в этой презентации, является так называемый «оператор Элвиса», более краткая версия троичного оператора. Я обнаружил, что мне не хватает некоторых функций Groovy при использовании традиционной Java, и это был бы один оператор, который я мог бы использовать на обоих языках, если бы он был добавлен. Оператор "Elvis" удобен для указания значения по умолчанию, которое можно использовать, когда вычисляемое выражение равно нулю. Как и оператор безопасной навигации Groovy, это краткий способ указать, как избежать ненужных нулей. Ранее я писал в блоге о том, как мне нравится избегать исключения NullPointerException.
В то время как другие аспекты Project Coin были в конечном итоге реализованы, этого не было. Почему оператор Элвиса в конечном итоге был отклонен, несмотря на то, что на JavaOne был представлен как вероятный кандидат на включение?
Чтобы было ясно, я специально спрашиваю об этом операторе и причине, по которой он был отклонен как часть "Project Coin" Java 7, учитывая, что он был серьезно рассмотрен тогда. Я подозреваю, что есть списки рассылки или подобные, где обсуждались причины отклонения, но я ничего не смог найти. Если есть более общая информация о том, почему она не включена ни в одну версию Java, это приемлемо, но не предпочтительно.
источник
?.
в качестве примера X = Java / Y = ), он, безусловно, был бы слишком широким, как обычный вопрос, но у вас был бы хороший ответ.Ответы:
Естественно, лучше всего задавать этот вопрос кому-то из Исполнительного комитета JCP, а не нам. Однако это не помешает мне заняться пустыми спекуляциями.
Ответ на каждый вопрос «почему не была реализована эта функция» всегда заключается в том, что выгоды не превышают затрат.
Эрик Липперт (бывший член команды C #) говорит, что для того, чтобы продукт имел функцию, эта функция должна быть:
Другими словами, должно быть много важных вещей, которые должны произойти, прежде чем любая новая функция языка программирования может быть реализована. Затраты больше, чем вы думаете.
В команде C # каждый новый запрос функции начинается с оценки минус 100. Затем команда оценивает выгоды и затраты, прибавляя баллы за выгоды и вычитая баллы за затраты. Если оценка не становится выше нуля, предложенная функция суммируется. Другими словами, новая функция должна обеспечивать убедительные преимущества.
Но Оператор Элвиса сделал это в C #. Так почему же он не превратился в Java?
Несмотря на их очевидное сходство, Java и C # имеют существенно различную философию языка. Об этом свидетельствует тот факт, что корпоративные программы на Java, как правило, представляют собой большие структурные коллекции архитектуры. Краткость и выразительность языка приносятся в жертву на алтаре церемонии и простоте кодирования. Хорошо известные шаблоны архитектуры программного обеспечения, которые могут распознавать все члены группы разработчиков, предпочтительнее языковых удобств.
Рассмотрим этот обмен Reddit :
Эти глубокие различия в философии языка распространяются не только на то, как используются языки, но и на сам процесс разработки языка. C # - доброжелательный диктаторский язык. Чтобы получить новую функцию в C #, вам действительно нужно убедить только одного человека: Андерса Хейлсберга .
Java использует более консервативный подход. Чтобы получить новую функцию в Java, она должна получить консенсус от консорциума крупных поставщиков, таких как Oracle, IBM, HP, Fujitsu & Red Hat. Очевидно, что этот процесс будет медленнее и станет более высокой планкой для новых языковых функций.
Вопрос «почему не реализована функция x ...» всегда неявно включает слова «... если это, очевидно, такая хорошая идея?» Как я уже продемонстрировал здесь, выбор никогда не бывает таким простым.
источник