Почему Java может принимать несколько параметров, но может возвращать только один объект? - PullRequest
5 голосов
/ 11 марта 2010

Почему Java был определен так, что методы могут принимать в качестве входных данных несколько параметров,
но может вернуть только один объект (или пустоту)?

Это как-то облегчило реализацию или использование языка?

Ответы [ 4 ]

5 голосов
/ 11 марта 2010

Вероятно, потому, что именно так C и C ++ делают это, а синтаксис языка Java очень похож (и, вероятно, основан) на эти языки.

На самом деле, согласно этой статье , Гослинг начал с расширения компилятора C ++, поэтому имеет смысл придерживаться большей части того же синтаксиса:

Чтобы сделать разработку более независимым от платформы процессом (и таким образом удовлетворить спрос потребительского рынка на гибкость процессора), Гослинг начал с расширения компилятора C ++.

5 голосов
/ 11 марта 2010

Может быть, предполагалось, что несколько возвращаемых значений будут инкапсулированы в объекте?

4 голосов
/ 11 марта 2010

Я не знаю точно, но я представляю, что Java выполняется как любая другая основанная на стеке среда выполнения. Это означает, что передача элементов в качестве параметров в метод выполняется легко, просто помещая их в стек перед передачей управления методу. Возвращаемые значения, вероятно, обрабатываются в ВМ, как это делают C и C ++ - возвращаемое значение всегда помещается в регистр, который по своей природе однозначен.

Это не большая проблема, потому что с универсальными значениями возвращение нескольких значений может быть обработано безопасным для типа способом, возвращая экземпляр чего-то вроде Tuple<type1, type2, type3>, что не является слишком большой нагрузкой для большинства случаи.

0 голосов
/ 11 марта 2010

Я думаю, было бы условно: именно так делают / делают основные ОО-языки, именно так и поступила Java. Однако официальный аргумент, вероятно, будет таким же, как аргумент о замыканиях - не включайте в себя вещи, которые затуманивают стандартный синтаксис для повседневных задач с не очень необходимыми задачами. Или, может быть, они решили, что один метод должен возвращать набор связанных значений, которые должны / могли бы войти в объект. Или, может быть, они просто не думают об этом / не имеют времени (довольно стандартная плата за разработку).

В соответствующей заметке я нашел обсуждение использования замыканий для макетирования множественных возвратов: http://weblogs.java.net/blog/brucechapman/archive/2007/11/closures_and_mu.html

...