"A", "an" і "the" у назвах методів та функцій: що ви приймаєте? [зачинено]


16

Я впевнений, що багато хто з нас в той чи інший момент бачили такі назви методів:

  • UploadTheFileToTheServerPlease
  • CreateATemporaryFile
  • WriteTheRecordToTheDatabase
  • ResetTheSystemClock

Тобто назви методів, які також є граматично правильними англійськими реченнями, включають зайві слова виключно для того, щоб вони читалися як проза. Особисто я не є великим прихильником таких "буквальних" назв методів, і вважаю за краще бути чіткими, все ще будучи максимально зрозумілими. Для мене такі слова, як "a", "an" та "the", просто виглядають незручно в назвах методів, і це робить назви методів зайвими довгими, не додаючи нічого корисного. Я вважаю за краще такі назви методів для попередніх прикладів:

  • UploadFileToServer
  • CreateTemporaryFile
  • WriteOutRecord
  • ResetSystemClock

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

Отже, ви перебуваєте в таборі "назви методів, які читаються як проза" чи "назви методів, які говорять про те, що я маю на увазі, але читаються вголос, як поганий переклад з іноземної мови на англійський"?


7
Я ніколи не бачив методів з такими іменами WriteTheRecordToTheDatabase. Якби хтось це перевірив, вони б серйозно поговорили.
Тім Робінсон

13
" Please"? Нічого собі
конфігуратор

3
Я просто хотів би додати, що wordpress має допоміжні функції шаблону, такі як "the_contents ()," get_the_post () "і т. Д. Це позбавляє лайна у мене.
Карсон Майєрс

1
@Carson Майерс Ха, це ідеальний приклад у реальному світі. Я, мабуть, придушив спогади, коли останній раз переглядав WordPress-код :-)
Майк Спросс

Відповіді:


21

Я погоджуся, що прозові методи смокчуть за одним винятком:

Одиничні тестові випадки

Зазвичай вони ніколи не дзвонять у ваш код і не відображаються у тестах. Таким чином, зручно мати читання з трохи більшою прозою:

  • Додавання ACustomerOrderFailWhenCustomersIdIsInvalid: Failed
  • OutOfBoundsPriceReturnsAnError: Пройдено
  • CanDeleteAnEventFromASeason: Пройдено

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


1
+1 - хороший приклад того, де назви методів прози можуть бути корисними. Це забавно, тому що тепер, коли ви згадуєте, я б зробив це спеціально , коли написання імен тестових одиниць, і , в зокрема , так що я знав , що, чорт візьми , тест робили , коли я побіг їх пізніше.
Майк Спрос

Це корисно і вписується у запропоновану Роєм Ошеровим умовну умову про MethodUnderTest_Condition_ExpectedBehaviour іменування. наприклад AddOrder_WithInvalidCustomerId_Fails, CreateItem_WithOutOfBoundsPrice_ReturnsErrorіDeleteEvent_EventExistsInSeason_Succeeds
StuperUser

@StuperUser для очікуваної поведінки, ви насправді поставили очікуваний результат тесту, і тому я не маю поняття, який метод повинен повернутися.
їстівний код

@danRhul Справедливий момент, я був недостатньо зрозумілий; .._AdditionFailsі .._DeletionSucceedsмає бути краще. Я поклав результат методу, але, як ви зазначаєте, їх можна було б переплутати з термінологією тестування пропуску / відмови.
StuperUser


10

Такі "довгі" імена не звучать як проза . Коли вони наодинці - можливо, але у супроводі решти коду, вони просто заважають. Перевір:

bool ResultOfTheUpload
      = UploadTheFileToTheServerPlease(TheNameOfTheFile, TheServersAddress);

Юууук! ..

Це не дійсний англійський текст, і жодна мова програмування не буде виглядати як одна. Тож немає сенсу витрачати байти на статті.


1
Хороший приклад того, чому мені так не подобається такий підхід! Коли я писав питання, я зосереджувався лише на назвах методів, вони самі звучали як проза, але я згоден з вами: досить важко зробити так, щоб викликовий код насправді читався як проза, тому немає сенсу робити так, щоб імена окремих функцій звучали як написані Англійська.
Майк Спрос

3
Пропонуюbool ResultOfTheGentlyUploadOfTheFileToTheServer
Wizard79

Я працював з людиною, яка створила стандарти компанії, де потрібно було дотримуватися "Варіабельність" та "Метод". Цій же людині також подобалося, щоб усі рядки коду були вертикально вгору.
Кріс

7

З точки зору програмістів, "UploadFileToServer" має більше сенсу і легше читати та розуміти, ніж "UploadTheFileToTheServerPlease".

Більше ніж граматика англійської мови, читабельність та зрозумілість має значення більше в програмуванні!


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

@Naveen: Я працював з таким кодом, і перший шанс я перейменував на всі ці методи. І я не впевнений , що якби це був просто розробник чи ні, але я думаю , що є тенденція виконувати функції зробити кілька речей , коли ви пишете їх в якості пропозицій, тобто UploadTheFileAndProcessItAndEmailTheOrdersToTheCustomers, хоча , сподіваюся нічого зовсім , що погано в реальному житті.
Майк Спрос

@Mike Тоді я б перефактурував метод на два різні способи;)
Gopi

2

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

* UploadTehFileToTehServerPleaz
* WriteTehRecordToTehDatabase
* ResetTehSystemClock
* ICanHazTehCheezburger

Серйозно, я навіть хотів би поглянути на те, яким було і ім’я мого класу. Якби мій клас називався «Файл», я, мабуть, просто пішов би

*UploadToServer
*DownloadFromServer

Так було б

   File file = new file;
   file.UploadtoServer(ServerAddress);

Просто тривіальний приклад, але, сподіваємось, це досить наочно.


Хе-хе. Я фактично бачив, як "Teh" переповзає в назви методів, що слідують за "англійською" схемою імен. Що стосується вашого другого пункту: я повністю згоден, надмірність у назвах методів - це ще одне моє домашнє тварина ( File.UploadFileToServer... тьфу).
Майк Спрос

0

Мені особисто все одно. Я бачив їх, і вони мене не турбують. Я навіть не думав про них, поки інший програміст не роздував про них. Мені здається шокуючою, що хтось так піклується про щось, що так мало має значення. Я маю на увазі, що він насправді сердився на це. Але це було на початку моєї кар'єри, приблизно 11 років тому, і з тих пір я виявив, що розробники гніваються на незначні речі насправді досить поширені. Саме тому менеджерам розробників так добре платять. Вони мають стикатися з розробниками щодня.

І я вважаю за краще це, ніж "UL_FlToSrv".

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.