Лучшие практики для именования параметров в Java-конструкторах и простых установщиках - PullRequest
40 голосов
/ 14 июня 2009

Существует ли стандартное приемлемое соглашение для параметров в Java для простых конструкторов и сеттеров?

( Я видел ответ для C ++ , но методы часто различаются между двумя сообществами)

Предположим, у меня есть класс C с полем foo.

Я обычно видел следующие три варианта:

1) Используйте фактическое имя поля с подчеркиванием:

public C(Type foo_)
{
   foo = foo_;
}

public void setFoo(Type foo_)
{
   foo = foo_;
}

2) Используйте фактическое имя поля, просто используйте «this» в настройках:

public C(Type foo)
{
   this.foo = foo;
}
public void setFoo(Type foo)
{
   this.foo = foo;
}

3) Совершенно противоречивые вещи, такие как:

public C(Type bar)
{
   this.foo = bar;
}
public void setFoo(Type bar)
{
   this.foo = bar;
}

Я склонен использовать 2, но мне интересно, что такое правильная практика.

Ответы [ 13 ]

0 голосов
/ 14 июня 2009

Соглашение, которое я использую, заключается в том, чтобы вводить переменные-члены с помощью m_; как в:

String m_foo;

таким образом, очень ясно, какие переменные являются членами, а какие нет.

также, моя последняя компания предваряла все аргументы в методе с "the", как в:

public doFoo (String theKey, String theRandom) {

....

}

это позволило очень легко не путать аргументы с внутренними переменными.

Соглашения должны заключаться в том, чтобы облегчить чтение кода и уменьшить количество ошибок.

0 голосов
/ 14 июня 2009

Вариант два.

Если вы видите определение «setFoo (String foo)» (например, в javadoc или hover), разумно ожидать, что для поля «foo» установлено значение параметра «foo». Другие имена могут потребовать от вас двойной проверки - например, будет ли setName (String person) просто устанавливать имя для person или будут предприняты дополнительные действия (поиск имени в таблице лиц и т. д.) ?.

Обычная причина не делать этого заключается в том, что вы можете случайно написать

... foo = foo;

вместо

this.foo = foo;

, который является самостоятельным назначением параметра и ничего не делает. Современные компиляторы это улавливают - современная IDE генерирует оператор this.foo = foo при создании установщика для поля.

В Eclipse вы можете создать метод получения и установки для поля с помощью Ctrl-1, когда курсор находится на соответствующем поле.

0 голосов
/ 14 июня 2009

Поскольку вы кодируете, чтобы сделать интерфейс как можно более понятным, я всегда предпочитаю использовать поле как _name внутри, иметь его как name в качестве аргумента метода, элегантно присвоив ему _name = name. Я видел это в Рефакторинге Фаулера и других подобных учебниках, хотя я вижу уродливые механизмы, такие как использование поля как name внутри, а затем использование aName в качестве аргумента метода, тьфу.

...