Аморально ли я использовать имя переменной, которая отличается от ее типа только регистром? - PullRequest
95 голосов
/ 20 января 2009

Например, возьмите этот кусок кода:

var person = new Person();

или для вас Pythonistas:

person = Person()

Мне постоянно говорят, насколько это плохо, но я еще не видел пример аморальности этих двух строк кода. Для меня человек - это человек, и попытка дать ему другое имя - пустая трата времени. Я полагаю, что за несколько дней до выделения синтаксиса это было бы очень важно. Но в наши дни довольно легко отличить имя типа от имени переменной. Черт, даже здесь легко увидеть разницу на SO.

Или я что-то упускаю? Если это так, было бы полезно, если бы вы могли привести пример кода, который вызывает проблемы.

Ответы [ 33 ]

95 голосов
/ 20 января 2009

Что говорят те, кто говорит вам, что это плохо? Я делаю это все время. Это самый простой и выразительный способ назвать одну переменную типа. Если вам нужно два Person объекта, вы можете добавить префикс person к значимым прилагательным, таким как

fastPerson
slowPerson

иначе просто

person

хорошо со мной.

70 голосов
/ 20 января 2009

Я часто использую этот шаблон в сигнатурах методов. Если я не могу предоставить альтернативное описательное имя, тогда, IMHO, в этом нет ничего плохого.

Что было бы неправильно, если бы у вас было два типа личности и человека, то это очень, очень неправильно.

46 голосов
/ 20 января 2009

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

Person person = new Person(); // okay

int Int = 42; // pure evil
18 голосов
/ 20 января 2009

Если кто-то говорит, что это зло, спросите его, лучше ли это:

var abc = new Person();
15 голосов
/ 20 января 2009

Если человек является обычным человеком в контексте, тогда «человек» - это действительно хорошее имя. Конечно, если человек играет определенную роль в коде, то лучше назвать ее, используя роль.

9 голосов
/ 29 апреля 2009

Полагаю, я буду опровергнут за это, но ...

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

8 голосов
/ 20 января 2009

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

6 голосов
/ 20 января 2009

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

Лицо person = new Person ();

Персона person2 = new Person ();

Это будет граничить с "Плохо". Однако в этом случае вам следует провести рефакторинг своего оригинального человека, чтобы провести различие между ними.

Что касается вашего примера, переменная name "person" является совершенно описательным именем для объекта "Person". Поэтому в этом нет ничего плохого.

6 голосов
/ 20 января 2009

Джейсон - Я не уверен, кто сказал тебе, что это плохо. Ряд авторов используют это как стандартный способ выражения Экземпляра (строчные буквы) для Класса (с большой буквы).

Я использую это довольно часто, поскольку обнаруживаю, что переменная в нижнем регистре фактически сообщает мне не только то, что это экземпляр, но также и имя класса.

Если у кого-то нет веских аргументов в обратном, я, безусловно, продолжу это делать.

3 голосов
/ 20 января 2009

Я часто использую это в своем коде и не думаю, что с этим что-то не так. Тем не менее, я (вероятно) не буду использовать его в методе дольше, чем, скажем, один экран, и если есть несколько экземпляров класса Person. Определенно не называйте их person1, person2, person3 ... вместо этого используйте что-то более описательное, например person_to_del, person_to_ban, person_to_update и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...