Я часто нахожу, что хочу написать код, похожий на это на С#, но мне неудобно с именами идентификаторов:
public class Car
{
private Engine engine;
public Engine Engine
{
get
{
return engine;
}
set
{
engine = value;
}
}
public Car(Engine engine)
{
this.engine = engine;
}
}
Здесь у нас есть четыре разные вещи, называемые "движком":
-
Engine
класс. Двигатель кажется хорошим, естественным именем. -
Engine
государственная собственность. Кажется глупым называть его MyEngine или TheCarsEngine. -
Engine
частное поле, поддерживающее свойство. Некоторые схемы именования будут рекомендоватьm_engine
или_engine
, но другие говорят, что следует избегать всех префиксов. -
Engine
имя параметра в конструкторе. Я видел схемы именования, которые рекомендуют префикс подчеркивания по всем параметрам, например,_engine
. Мне это очень не нравится, поскольку параметр видим вызывающим абонентам через Intellisense.
Особые вещи, которые мне не нравятся в написанном коде, заключаются в следующем:
- Если вы изменяете имя параметра в конструкторе, но не используете его в теле конструктора, вы получаете тонкую ошибку, которую компилятор, вероятно, не сможет определить.
- У Intellisense есть плохая привычка к автозаполнению неправильной вещи для вас, и иногда вы не заметите, что это изменило ситуацию. Вы снова получите тонкую ошибку, если тело конструктора случайно закончится
this.engine = Engine;
Кажется, что каждое имя подходит по отдельности, но вместе они плохо. Что-то должно уступить, но что? Я предпочитаю менять частное поле, так как он не отображается пользователям, поэтому обычно я получаю m_engine
, который решает некоторые проблемы, но вводит префикс и не останавливает Intellisense от изменения Engine
до Engine
.
Как бы вы переименовали эти четыре элемента? Почему?
(Примечание. Я понимаю, что свойство в этом примере может быть автоматическим. Я просто не хотел, чтобы этот пример был сложным.)
См. также: Я безнравственна для использования имени переменной, которое отличается от его типа только в случае?