«A», «an» и «the» в именах методов и функций: что вы думаете? [закрыто]

16

Я уверен, что многие из нас видели такие имена методов в тот или иной момент:

  • UploadTheFileToTheServerPlease
  • CreateATemporaryFile
  • WriteTheRecordToTheDatabase
  • ResetTheSystemClock

То есть имена методов, которые также являются грамматически правильными английскими предложениями и включают в себя дополнительные слова исключительно для того, чтобы они читались как проза. Лично я не большой поклонник таких «буквальных» имен методов и предпочитаю быть лаконичными, но при этом быть максимально ясным. Для меня такие слова, как «a», «an» и «the», выглядят просто неуклюже в именах методов, и это делает имена методов излишне длинными без реального добавления чего-либо полезного. Я бы предпочел следующие имена методов для предыдущих примеров:

  • UploadFileToServer
  • CreateTemporaryFile
  • WriteOutRecord
  • ResetSystemClock

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

Итак, вы находитесь в «именах методов, которые читаются как прозы», или в «именах методов, которые говорят, что я имею в виду, но читают вслух, как плохой перевод с иностранного языка на английский»?

Майк Спросс
источник
7
Я никогда не видел методы с такими именами, как WriteTheRecordToTheDatabase. Если кто-то проверит это, они получат серьезную беседу.
Тим Робинсон
13
" Please"? Wow
конфигуратор
3
Я просто хотел бы добавить, что WordPress имеет вспомогательные функции шаблона, такие как "the_contents ()," "get_the_post ()," и т. Д. Это вывело меня из себя.
Карсон Майерс
1
@Carson Myers Hah, это идеальный пример этого. Должно быть, я подавил воспоминания о том, как в последний раз смотрел код WordPress :-)
Майк Спросс

Ответы:

21

Я согласен, что прозаические методы отстой за одним исключением:

Модульные тесты

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

  • AddingACustomerOrderFailWhenCustomersIdIsInvalid: Failed
  • OutOfBoundsPriceReturnsAnError: пройдено
  • CanDeleteAnEventFromASeason: пройдено

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

Fishtoaster
источник
1
+1 за хороший пример того, где имена методов прозы могут быть полезны. Это забавно, потому что теперь, когда вы упоминаете, я бы сделал это специально , когда написание имен тестовых единиц, и , в частности , так что я знал , что, черт возьми , тест делали , когда я побежал их позже.
Майк Спросс
Это полезно и соответствует предложенному Рою Ошерову MethodUnderTest_Condition_ExpectedBehaviour соглашению об именовании модульных тестов. например AddOrder_WithInvalidCustomerId_Fails, CreateItem_WithOutOfBoundsPrice_ReturnsErrorиDeleteEvent_EventExistsInSeason_Succeeds
StuperUser
@StuperUser для ожидаемого поведения, вы фактически поставили ожидаемый результат теста, и поэтому я понятия не имею, что метод должен возвращать.
съедобный код
@danRhul Честно говоря, я не был достаточно ясен; .._AdditionFailsи .._DeletionSucceedsдолжно быть лучше. Я поставил результат метода, но, как вы заметили, их можно было бы спутать с терминологией «успешно / неудачно».
StuperUser
10

Перефразируя Лоуренса из офисного пространства ...

Нет, нет, чувак, я верю, что если бы кто-то, с кем я работал, назвал функцию «UploadTheFileToTheServerPlease», он бы его ... ударил, чувак.

GrandmasterB
источник
10

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

bool ResultOfTheUpload
      = UploadTheFileToTheServerPlease(TheNameOfTheFile, TheServersAddress);

Yuuuuk! ..

Это неверный текст на английском языке, и ни на одном языке программирования он не будет выглядеть так. Так что нет смысла тратить байты на статьи.

П Швед
источник
1
Хороший пример того, почему мне так не нравится этот подход! Когда я писал вопрос, я сосредоточился только на именах методов, которые сами по себе звучат как проза, но я согласен с вами: довольно сложно заставить вызывающий код фактически читать как проза, поэтому нет смысла заставлять отдельные имена функций звучать как написанные Английский.
Майк Спросс
3
Я предлагаюbool ResultOfTheGentlyUploadOfTheFileToTheServer
Wizard79
Я работал с человеком, который создал стандарты компании, где «theVariable» и «aMethod» должны были соблюдаться. Этот же человек также хотел, чтобы все строки кода располагались вертикально.
Крис
7

С точки зрения программистов, «UploadFileToServer» более понятен и легок для чтения и понимания, чем «UploadTheFileToTheServerPlease».

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

Гопи
источник
Полностью согласен ... если я читаю код, написанный в первом стиле, в течение нескольких дней, я уверен, что он сведет меня с ума ..
Naveen
@Naveen: я работал с таким кодом, и при первой же возможности я переименовал все эти методы. И я не уверен, был ли это просто разработчик или нет, но я думаю, что есть тенденция заставлять функции делать несколько вещей, когда вы пишете их как предложения, то есть UploadTheFileAndProcessItAndEmailTheOrdersToTheCustomers, хотя, надеюсь , в реальной жизни не все так плохо.
Майк Спросс
@Mike Тогда я бы реорганизовал метод на 2 разных метода;)
Гопи
2

Учитывая, сколько опечаток в моей жизни, я бы в конечном итоге

* UploadTehFileToTehServerPleaz
* WriteTehRecordToTehDatabase
* ResetTehSystemClock
* ICanHazTehCheezburger

Серьезно, я бы даже посмотрел на то, как назывался мой класс. Если бы мой класс назывался «Файл», я бы, вероятно, просто

*UploadToServer
*DownloadFromServer

Так было бы

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

Просто тривиальный пример, но, надеюсь, это достаточно наглядно.

MIA
источник
Хехе. Я на самом деле видел, как «Teh» проникает в имена методов, следуя «английскому» шаблону именования. Что касается вашего второго пункта: я полностью согласен, избыточность в именах методов - еще одна моя любимая мозоль ( File.UploadFileToServer... тьфу).
Майк Спросс
0

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

И я бы предпочел увидеть это, чем "UL_FlToSrv".

ElGringoGrande
источник