Що ви називаєте функціями / змінними / тощо, коли не можете придумати гарне ім’я? [зачинено]


13

Коли ви визначаєте функцію / змінну / тощо і не знаєте, як її назвати, як ви її називаєте? Як ви придумали ім’я?

Якщо ви використовуєте тимчасове ім'я як карту місця, поки не дасте йому справжнє ім'я, яке тимчасове ім'я ви використовуєте?


оновлення

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


Будьте обережні, використовуючи всі літери для змінних імен. За популярною конвенцією це означає глобальну змінну.
губка

@sunpech, я знаю, я використовую цю умову іменування і для констант. Але я думаю, що з великої літери виходить виділятися, тому я не забуваю перейменовувати її. Я так довго не залишаю його таким.
JD Isaacks

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

Якщо ви не можете придумати гарне ім’я змінної чи функції, ви або не розумієте, що ви робите, або у вас поганий дизайн. У будь-якому випадку, ляпання якоїсь довільної назви на зразок "х" (якщо ви не маєте справу з координатами) не вирішить вашу дилему; це тільки погіршить і біль зберегти більше.


8
Я не погоджуюсь. Розробники не завжди мають повне розуміння термінології бізнесу. Чорт забирає, що навіть клієнт може не в змозі передати термінологію під час збирання вимог - не кажучи про те, що часом розуміє власний бізнес! Але це не заважає виробляти програмне забезпечення. Це не зупиняє створення прототипів. Або навіть викинути з коду правильно через нерозуміння. Але код у цих ситуаціях все ж потрібно виробляти та доставляти.
губка

3
@sunpech Вибачте, але це трохи страшно. Ви намагаєтесь сказати нам, що звичайно писати випадковий код, не знаючи, що він насправді робить? Якщо ви чогось не знаєте, докладіть певних зусиль, щоб це з’ясувати, і уникнете проблем у майбутньому.
Адам Біртек

@AdamByrtek Ні, я цього не маю на увазі. Я говорю, що розробник та команда не завжди мають найкраще розуміння того, чого хоче клієнт. Деякі клієнти важко пояснюють, чого вони хочуть, або не знають, чого вони хочуть. Неправильний код трапляється. У проектах трапляються проблеми від поганих вимог до нереальних термінів. Це реальність. Не існує ідеального світу, де розробник буде вирішувати всі невідомі, де клієнти ідеальні, а терміни - точні. Код, згенерований для прототипів, повинен бути викинутий. Але кодування все ж має відбутися.
губка

продовження ... Ми не говоримо про виготовлення виробничого коду або остаточного коду безпосередньо перед реєстрацією. Ми говоримо про те, як назвати щось, про що ми ще не до кінця розуміємо - почати спочатку з чогось незрозумілого з можливих вагомих причин (наприклад: ніхто в команді цього ще не розуміє, може, і ні навіть клієнт). Але все одно потрібно рухатися вперед, виходячи з того, що відомо.
губка

1
@sunpech: Єдине місце, яке я насправді бачив fooі barякий використовується в коді, - це невеликі фрагменти коду, які використовуються для показу концепції. Звичайно, я також спіткнувся, коли придумував імена, але ніколи не опинився в такому поганому становищі, де fooбув єдиний розумний варіант. Якби це сталося, то я справді не знаю, що, до чорта я роблю, і мені потрібно повернутися до креслярської дошки та псевдокоду, поки я не знаю, що робити.
габлін

5

Це питання і особливо його відповіді лякають мене безглуздо. Хтось повинен буде підтримувати той код, в якому ви просто назвали змінну "Кубок", ви знаєте. Якщо вам не пощастить, то хтось буде вам!

У вас є змінна. Це річ. Це все одно являє собою річ. І речі мають назви. Ось як ви знаєте, що це речі! Ви справді говорите мені, що ви повинні назвати річ по іншій речі, тому що ви не можете придумати назву фактичної речі?

Ітераторів слід називати i. Вкладені ітератори, ймовірно, є помилкою, але якщо вони вам потрібні, тоді пробирайтесь через решту голосних, щоб (а, е, о, і бог допоможе мені, так, іноді у).

Крім цього, просто називайте річ, яка вона є, і роби з нею!


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

Ага. Я ніколи не робив j і k. Я бачу, що це розумно.
Dan Ray

8
Однією з причин того, що Дайкстра був таким природним придатним для інформатики, було те, що його ім’я включало три найпоширеніші змінні ітератора в потрібному порядку.
Гленатрон

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

4

Якщо я не можу одразу придумати велике ім’я, тимчасово використовую ім’я "добре", а потім продовжую кодувати. Принаймні, це буде щось, що адекватно описує предмет, навіть це не ідеально . Майже завжди, коли я закінчу писати перший проект цього конкретного фрагмента коду, мені припаде досконаліша назва. В процесі кодування мої наміри з цією змінною стають більш зрозумілими. (З іншого боку, іноді мені трапляється, що змінна to була непродумана для початку, і я видаляю її на користь чогось іншого.)


3

Я називаю це тим, що, на мою думку, має виконувати функція - те, що більш-менш передає наміри. Після того, як написано тіло функції, я вважаю очевидним, як її викликати, і повернутися і перейменувати її за потреби.


1
Це не завжди працює, особливо коли розробник може не знати термінологію або навіть наміри бізнесу / галузі. Щось більш загальне і очевидне слід використовувати, щоб переконатись, що це потрібно визначити і змінити згодом. ОП, здається, запитує, коли наміри невідомі та що слід спочатку використовувати. Якщо називання - це те, що більш-менш передає наміри, то добре ім’я вже не за горами.
губка

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

1
@sunpech: Як можна написати функцію, не знаючи, що вона робить?
конфігуратор

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

2
@sunpech: Я ніколи не говорив, що імена повинні бути "хорошими" з самого початку. Я просто не бачу, як ви потрапите в ситуацію, коли хочете створити функцію, але не знаєте, що це буде робити.
конфігуратор

2

фу та бар . Оскільки для іменування функцій / змінних поки що немає сенсу, я використовую комбінацію Foo та / або Bar із тим, що я намагаюся визначити.

Це полегшує пошук / пошук пізніше, коли я краще розумію, що його слід назвати.

Також дивіться Foobar на wikipedia .

Терміни foobar, foo, bar і baz іноді використовуються як імена заповнювачів (також їх називають метасинтаксичними змінними) в комп'ютерному програмуванні або документації, пов'язаній з комп'ютером. Вони використовувались для іменування сутностей, таких як змінні, функції та команди, призначення яких неважливе і служать лише для демонстрації поняття. Самі слова не мають значення в цьому вживанні. Foobar іноді використовується в поодинці; foo, bar та baz іноді використовуються в такому порядку, коли потрібно кілька об'єктів.


1

Пофіксуйте свою функцію чимось і дайте їй найкраще ім’я на даний момент. Наприклад, функцією, яка зберігає всі продукти для вибраного користувача в базу даних, може бути RENAME_SaveAllProductsForTheSelectedUserToTheDatabase()


Звичайно, у цьому випадку вам слід просто назвати функціюSaveAllProductsForTheSelectedUserToTheDatabase()
конфігуратор

1

Що б я не назвав ці важкі назви змінні, я //TODO find a better nameкоментую, щоб я міг повернутися пізніше, щоб перейменувати його

Зазвичай, коли я починаю використовувати змінну / функцію / клас, я знаходжу для них кращу назву.


0

Найкраще вводити хороше ім’я незабаром, поки ви маєте на увазі код, ніж чекати пізніше, коли ви захочете, щоб ви його добре назвали!


0

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


0

Іноді я тимчасово використовую zzzz.

Хороше правило, яке допоможе вам:

  • Чи повертається воно булевим і не має побічних ефектів: Тоді використовуйте прикметник (почніть з є, було), але ніколи не буде майбутнього часу.
  • Чи повертається він іншого типу і не має побічних ефектів: Тоді використовуйте іменник.
  • Чи не повертає нічого, окрім чогось: Тоді використовуйте дієслово.
  • Це клас: Тоді використовуйте іменник.

-1

Раніше я багато використовував bob , але це була б єдина невірно вказана змінна функція / скрипт, оскільки в іншому випадку код швидко стає нечитабельним.

(bob - похмілля з uni-днів - відхід від виклику змінних bob та fred)

Я із задоволенням використовую i для лічильника.

Краще використовувати значущі імена, навіть якщо вони не короткі та спритні.


Я працював з хлопцем, який використовував такі імена для своїх додатків та занять у своїх програмах. Можливо, не потрібно говорити, що його код був взагалі дуже бідним.
Даш-Том-Банг

2
@ dash-tom-band: Я думаю, що його код, як правило, дуже боб.
конфігуратор

Якщо я можу вписати своє ім’я в якусь угорську нотацію для перерахування, я зазвичай це роблю, навіть якщо це трохи розтягує. TPropertyEnhancmentTypeEditor = (PETEObtuse, PETEAwful, PETEDispicable);
Пітер Тернер

-1

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





-3

Я схильний використовувати речі на своєму столі.

  • Кубок
  • Alt
  • Foo
  • b / a / c (баклажа з однієї літери)
  • алк (вимовляється багатолітерний барахло)

Я також схиляюся до загальних назв (принаймні для функцій):

  • міняти місцями
  • процес
  • переглянути
  • возитися

Однак це для тимчасових речей. Я клянусь , нічого не робить його в сховище, набагато менше продукції.

...


Я завжди відчуваю себе брудною, але іноді найбільш очевидною назвою методу є "Іти" або "DoIt". Кожен раз, коли я можу придумати краще ім’я, яке я роблю, але іноді це дійсно так: "зробіть ту роботу, яку має на увазі назва програми". Це, однак, занадто довго, щоб використовувати для назви функції. :)
dash-tom-bang

@ dash-tom-bang: чомусь runвиглядає набагато краще, ніж go. Можливо, це тому, що ми всі хотіли, щоб наші програми були швидшими.
конфігуратор
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.