2012-06-12 2 views
22

Когда мы создаем методы интерфейса, мы не можем сделать что-то вроде в Java:Зачем нам нужно указывать имя параметра в интерфейсе?

void interface_method(Integer,String, /* other parameter */); 

Вместо этого я заметил, что мы должны дать имена параметров LILE:

void interface_method(Integer i, String s); 

Кроме того, процессы не нужно иметь такое же имя параметра, как в методе интерфейса.

Я нашел аналогичный вопрос о C# более here. Они упоминают один сценарий с именем параметр, но я не нашел в JavaScript никакой другой важной причины.

+1

+1: действительно интересующий вопрос. C и C++ не имеют таких требований. Не знаю, почему делает Java. – Heisenbug

+0

Здесь вы найдете много предложений относительно возможных причин, но это все догадки. Вы спрашиваете не в том месте. Вам нужно спросить Джима Гослинга. – EJP

ответ

28

С технической точки зрения это не обязательно.

Я всегда воспринимал это как нормализацию синтаксиса и помощь в документации.

Таким образом, нет:

  1. Нет причины для проведения различия между классом и методами интерфейса синтаксисом и
  2. По умолчанию Javadoc документация может быть получена с использованием (описательное!) Имени параметра.
+1

+1 Ваш вопрос о Javadoc можно сделать еще сильнее: если имена параметров были необязательными, то все теги '@ param' должны были быть в правильном порядке, а отсутствующие параметры могут вызвать много путаницы. – dasblinkenlight

4

Мое мнение по этому вопросу:

  1. Это в спецификации языка для параметров, имена;

  2. Интерфейс интерфейса, имена помогают сообщить значение;

  3. Интерфейс на самом деле не является прямым декларацией реализации, которая будет следовать, как в C/C++, поэтому сравнение не совсем корректно;

+0

1.Если его спецификация языка, они всегда могут сделать исключение для метода интерфейса ..! 2. Не будет ли javadoc лучшим вариантом? –

+1

@PriyankDoshi может быть, они будут, но я сомневаюсь. С именами параметров вы вынуждены общаться, с javadoc это необязательно. – maksimov

+0

Да, это может быть так. Программисты всегда ненавидят документацию ..: имя параметра P может служить цели. –

14

Без имен параметров очень сложно различать параметры одного и того же типа.

double divide(double, double); 

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

+0

, если его вопрос правильного различения параметров не лучше с помощью javadoc, а не с именем параметра ? –

+3

@PriyankDoshi IMO не очень; * первый * источник документации всегда должен быть кодом, потому что код является конечным артефактом. Javadocs предназначены для предоставления * дополнительной информации, недоступной в подписи. –

+0

@PriyankDoshi: Также нет требования, чтобы javadoc перечислял параметры в том же порядке, что и подпись метода. Можно было бы сделать дело, чтобы сначала указать наиболее важный параметр. Кроме того, если вы добавите параметр в метод и поместите его в начале, вся старая документация будет признана недействительной, потому что «первый параметр» больше не относится к одной и той же вещи. С именами цель 'thing1' остается прежней, даже если она становится вторым параметром. – unholysampler