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

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

var person = new Person();

или для вас Pythonistas:

person = Person()

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

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

Ответы [ 33 ]

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

Я также не вижу никаких проблем с этой практикой. Пока есть только одна переменная этого класса, ее легко написать и легко прочитать. Имо, это даже применимо в основном текстовом редакторе. Я лично не могу вспомнить, чтобы кто-то называл это плохим или даже аморальным. Просто продолжайте делать это:)

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

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

Например, если вы имели дело с подсчетом стоимости определенного товара в интернет-магазине, следующий код не подходит:

Decimal _decimal = item.BaseCost + item.Tax;

Вместо этого было бы рекомендовано более описательное имя, такое как _total или _cost.

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

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

fastPerson / slowPerson, как и выше, в порядке ... они описательны и отличаются от имени типа переменной ... но, если уж на то пошло, вызывать int "Int" было бы просто лениво.

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

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

Что касается типов CLR (int, string и т. Д.), Вы можете использовать либо String, либо string (и т. Д.) Для объявления типа, поэтому я бы не использовал что-то вроде

int Int = 0;
string String = "hi there";
1 голос
/ 20 января 2009
Person person = new Person()

хорошо в моей книге.

Когда становится ужасно, когда у тебя есть:

string Person;
string person;

Очень легко перепутать 2.

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

Я часто использую Person person = new Person() сам. Обычно используется в Java / C #.

Хотя я вчера удивился, почему

private enum DataType {NEW, OLD}

не работает в C # ...

Особенно видно, как вы можете использовать String, string, Double, double, ... по желанию в C #.

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

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

1 голос
/ 14 сентября 2009

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

void SaveToDatabase(Person person) {...}

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

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

void AddToAccount(Account account, Person person)  {...}

чем это

void AddToAccount(Account account, Person dependent)  {...}

Однако, пожалуйста, пожалуйста - довольно, пожалуйста, не ставьте 'a' или 't' перед именем типа. И.Е. aPerson для «человека» или tPerson для «человека». Это слишком сложно и не добавляет много, если вообще имеет значение. Кроме того, вы начинаете загрязнять свою область с помощью набора переменных, начинающихся с a или t, которые могут минимизировать значение intelli-sense.

0 голосов
/ 06 июля 2010

Абсолютно ничего плохого в этом, если учесть предостережения, на которые указывают другие (здесь для удобства суммированы): не делать это с примитивными типами, рефакторинг исходного экземпляра, если позже добавляется другой экземпляр, не использовать char-case для различения имен классов, и т.д.

Мое эмпирическое правило? Утверждения в коде должны читаться как простые английские предложения.

Лицо person = new Person ();

Сотрудник сотрудника = person.getRole (СОТРУДНИК);

Родительский родитель = person.getRole (PARENT);

person.getFullName ();

employee.getSalary ();

parent.getChildren ();

parent.getFullName (); // предполагаем, что шаблон декоратора при воспроизведении

if (person.hasRole (СОТРУДНИК)) {

...

}

и т. Д.

Если область действия переменной ограничена (например, метод инкапсуляции составляет 10-15 строк), я мог бы даже использовать «p» вместо «person». Более короткие имена переменных меньше отвлекают, когда вы пытаетесь удержать контекст в своей голове. Избегайте безвозмездных префиксов, таких как «а» или (дрожь) венгерские обозначения и их ответвления. (Имейте в виду, я не имею ничего против таких префиксов, когда они используются в соответствующем контексте - код API C ++ / COM / ATL / Win32 и т. Д., Где это помогает сохранять прямые назначения / типизацию).

Мои два (!) Бита: -)

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

Аморально ... Нет. Сложнее, чем должно быть для рефакторинга, .. Да.

Попробуйте "_person"

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