Как вы называете функции / переменные / и т.д., когда не можете придумать хорошее имя? [закрыто]


13

Когда вы определяете функцию / переменную / etc и не знаете, как ее назвать, как вы ее называете? Как ты придумал имя?

Если вы используете временное имя как визитную карточку, пока не дадите ему настоящее имя, какое временное имя вы используете?


Обновить

Я использую такие вещи , как WILL_NAME_LATER, NEEDS_NAMEили TO_BE_NAMED. Я надеялся, что существует принятая конвенция, я действительно надеялся, что, если бы я использовал эту принятую конвенцию, моя IDE выделяла имя, пока я не изменила его.


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

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

3
Для всех вас, людей, которые говорят, у вас никогда не должно быть проблем с придумыванием имени ... Даже Джон Скит иногда не может: stackoverflow.com/questions/521893/…
JD Isaacks

@JohnIsaacks Я думаю, ты должен быть смелым временно . Слишком много людей читают этот вопрос и превращают код во что-то святое. Честно говоря, да, вы можете писать небрежный код ОСОБЕННО, когда вы пытаетесь продвинуться к чему-то более важному. Мы не втираем код в камень здесь.
Спонг

1
Я предполагаю, что условием для чего-то подобного является добавление TODO в код с объяснением того, почему вам нужно его обновить. Многие инструменты могут анализировать эти TODO и отображать список всех вещей, которые еще предстоит сделать.
Эдуардо Скос

Ответы:


29

Почти невозможно не придумать название для артефакта, который вы хотите создать. Вам может не понравиться то, какое имя вы придумали, потому что оно не лаконично и не сексуально, но если вы слишком усердно думаете, у вас получится плохо названный артефакт.

Допустим, у вас есть что-то, что помогает вам создавать объекты, но вы не знаете, что это обычно называется фабрикой. Просто назовите это ObjectCreator. Звучит глупо, но, по крайней мере, понятно.

Допустим, у вас есть словарь, который преобразует имена хостов в IP-адреса. Просто продолжайте и назовите это HostnamesToIpAddresses. Конечно, это долго, но это говорит именно то, что он делает.

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


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

1
+1 из-за "The inability to come up with a name for something means you don't know what it is doing". Я думаю, что это действительно важный момент. Осознание этого поможет вам найти неясности и неясность в коде.
BiAiB

34

Я всегда стараюсь дать своим переменным и функциям отличные имена .

Если я не могу придумать хорошего имени, я соглашусь на хорошее имя .

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

За 15 лет профессионального программирования я никогда не мог придумать достойного имени.


6
+1 за то, что ты поэтический.
Спонг

1
... однако 15 лет и 6 месяцев назад родился Microsoft Боб.
VirtuosiMedia

12

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


8
Я не согласен. У разработчиков не всегда будет полное понимание терминологии бизнеса. Черт, даже клиент, возможно, не сможет передать терминологию во время сбора требований - не говоря уже о том, что иногда даже понимает свое дело! Но это не останавливает производство программного обеспечения. Это не останавливает создание прототипов. Или даже из-за того, что код выкинут из-за недостатка понимания. Но код в этих ситуациях все еще должен быть произведен и доставлен.
Спонг

3
@sunpech Извините, но это немного страшно. Вы пытаетесь сказать нам, что часто пишется случайный код, не зная, что он на самом деле делает? Если вы чего-то не знаете, приложите некоторые усилия, чтобы выяснить это, и вы избежите проблем в будущем.
Адам Быртек

@AdamByrtek Нет, я не это имел в виду. Я говорю о том, что не всегда разработчик и команда должны понимать, чего хочет клиент. Некоторым клиентам трудно объяснить, чего они хотят, или не знают, чего они хотят. Плохой код бывает. Проблемы возникают в проектах от плохих требований до нереальных сроков. Это реальность Не существует идеального мира, в котором разработчик мог бы разрешить все неизвестные, где бывают идеальные клиенты, а сроки точно. Код, созданный для прототипов, должен быть выброшен. Но кодирование все еще должно произойти.
Спонг

продолжение ... Мы не говорим о создании производственного кода или окончательного кода непосредственно перед регистрацией. Мы говорим о том, как назвать что-то, чего у нас пока нет самого полного понимания - начать сначала с чего-то непонятного, возможно, по уважительной причине (пример: никто в команде еще не понимает, может быть, нет даже клиент). Но все должно двигаться вперед, основываясь на том, что известно.
губка

1
@sunpech: единственное место, которое я на самом деле видел fooи barиспользовал в коде, - это небольшие фрагменты кода, используемые для демонстрации концепции. Конечно, я тоже спотыкаюсь, когда придумываю имена, но я никогда fooне оказывался в таком плохом положении, где был единственный разумный вариант. Если это произойдет, то я действительно не знаю, что, черт возьми, я делаю, и мне нужно вернуться к чертежной доске и псевдокоду, пока я не узнаю, что делать.
Габлин

5

Этот вопрос и особенно его ответы пугают меня бессмысленно. Знаете, кому-то придется поддерживать тот код, в котором вы только что назвали переменную "Cup". Если вам не повезет, то кто-то будет вами!

У вас есть переменная. Это вещь. Во всяком случае, это представляет собой вещь. И вещи имеют имена. Вот откуда ты знаешь, что это вещи! Вы действительно говорите мне, что вы должны назвать одну вещь за другой, потому что вы не можете придумать название реальной вещи?

Итераторы должны называться i. Вложенные итераторы, вероятно, являются ошибкой, но если они вам нужны, пройдите через оставшиеся гласные по порядку (a, e, o, u, и бог, помогите мне, да, иногда y).

Кроме того, просто назовите эту вещь тем, что она есть, и покончим с этим!


9
Я должен протестовать! Ясно, что внутренний итератор должен называться j, а внутренний внутри этого k . Давняя математическая традиция смотрит через плечо!
Фрэнк Ширар

Да. Я никогда не делал J и K. Я вижу, что это разумно, хотя.
Дэн Рэй

8
Одна из причин, по которой Дейкстра был настолько естественен для компьютерных наук, заключалась в том, что его имя включало три наиболее распространенные переменные итератора в правильном порядке.
Гленатрон

3
@glenatron: наконец, способ запомнить, как пишется это имя!
конфигуратор

4

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


3

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


1
Это не всегда работает, особенно когда разработчик может быть не знаком с терминологией или даже намерениями бизнеса / отрасли. Нужно использовать что-то более общее и очевидное, чтобы передать, что это нужно определить и изменить позже. ОП, кажется, спрашивает, когда намерение неизвестно, и что следует изначально использовать. Если наименование является чем-то, что более или менее выражает намерение, то хорошее имя уже не за горами.
губка

1
@sunpech Серьезно, даже когда я только начинал работу с довольно специфическим доменом, у меня не было проблем с поиском имени функции. Может быть, мне просто нужно написать больше функций. :)
Адам Лир

1
@sunpech: Как написать функцию, не зная, что она делает?
конфигуратор

4
@sunpech: я этого не говорил. Я просто сказал, что вы не можете написать функцию, не зная, что она делает. Это невозможно. Я никогда не видел, чтобы это случилось, и я не понимаю, как это могло произойти. Может быть, я ненормальный, но когда вы называете функцию DoFoo (), что, черт возьми, вы помещаете в нее ??
конфигуратор

2
@sunpech: я никогда не говорил, что имена должны быть «хорошими» с самого начала. Я просто не понимаю, как вы попали в ситуацию, когда вы хотите создать функцию, но вы не знаете, что она собирается делать.
конфигуратор

2

фу и бар . Поскольку пока нет смысла называть функции / переменные, я использую некоторую комбинацию Foo и / или Bar с тем, что я пытаюсь определить.

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

Также см. Foobar в Википедии .

Термины foobar, foo, bar и baz иногда используются в качестве имен заполнителей (также называемых метасинтаксическими переменными) в компьютерном программировании или документации, связанной с компьютером. Они использовались для именования объектов, таких как переменные, функции и команды, назначение которых неважно, и служат только для демонстрации концепции. Сами слова не имеют значения в этом использовании. Foobar иногда используется один; foo, bar и baz иногда используются в том порядке, когда требуется несколько сущностей.


1

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


Конечно, в этом случае вам нужно просто назвать функциюSaveAllProductsForTheSelectedUserToTheDatabase()
конфигуратор

1

Как бы я ни называл эти переменные, которые трудно назвать, я делаю //TODO find a better nameкомментарий, чтобы потом вернуться к нему и переименовать

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


0

Лучше ввести хорошее имя в ближайшее время, когда вы будете иметь в виду код, чем ждать до тех пор, пока вы не захотите, чтобы вы назвали его хорошо!


0

У меня почти никогда не бывает проблем с поиском хороших описательных имен ... но иногда именование становится излишним, так как имена классов и переменных очень похожи. WebClient webclient = новый веб-клиент (uri); ...и тому подобное.


0

Иногда я использую zzzz временно.

Хорошее правило, чтобы помочь вам это:

  • Возвращает ли оно логическое значение и не имеет ли побочных эффектов: затем используйте прилагательное (начните с is, was), но никогда в будущем времени.
  • Возвращает ли он другой тип и не имеет побочных эффектов: Затем используйте существительное.
  • Возвращает ли он ничего, но делает что-то: затем используйте глагол.
  • Это класс: тогда используйте существительное.

-1

В прошлом я часто использовал bob , но это была бы единственная переменная с неправильным именем в функции / скрипте, потому что в противном случае код быстро становится нечитаемым.

(bob - это похмелье с одних дней - сходит с рук при вызове переменных bob и fred)

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

Лучше использовать значимые имена, даже если они не короткие и быстрые.


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

2
@ Dash-Tom-Band: я думаю, что его код, как правило, очень боб.
конфигуратор

Если я могу перевести свое имя в какую-нибудь венгерскую запись для перечисления, я обычно делаю это, даже если это немного натянуто. TPropertyEnhancmentTypeEditor = (PETEObtuse, PETEAwful, PETEDispicable);
Питер Тернер

-1

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





-3

Я склонен использовать вещи на своем столе.

  • кружка
  • Alt
  • Foo
  • б / у / с (одно письмо мусор)
  • alk (произносимый многобуквенный мусор)

Я также склоняюсь к общим именам (по крайней мере для функций):

  • своп
  • процесс
  • reviseVar
  • паять

Это для временных вещей, хотя. Я клянусь, что ничто не делает это в хранилище, намного меньше производства.

...


Я всегда чувствую себя грязным, но иногда наиболее очевидным названием метода является «Go» или «DoIt». Всякий раз, когда я могу придумать лучшее имя, я делаю это, но иногда это действительно так: «делай работу, которую подразумевает название программы, скоро произойдет». Это, однако, слишком долго, чтобы использовать для имени функции. :)
dash-tom-bang

@ Dash-Tom-Bang: По некоторым причинам, runвыглядит намного лучше, чем go. Может быть, это потому, что мы все хотели бы, чтобы наши программы были быстрее.
конфигуратор
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.