Я часто нахожу, что хочу написать код, похожий на это на С#, но мне неудобно с именами идентификаторов:
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.
Как бы вы переименовали эти четыре элемента? Почему?
(Примечание. Я понимаю, что свойство в этом примере может быть автоматическим. Я просто не хотел, чтобы этот пример был сложным.)
См. также: Я безнравственна для использования имени переменной, которое отличается от его типа только в случае?