Имеет ли смысл использовать «ys» вместо «ies» в идентификаторах для облегчения поиска и замены? [закрыто]

9

Хотя грамматически неправильно, но при написании идентификаторов для функций, переменных и т. Д. Имеет ли смысл просто добавлять "s" к множеству слов, оканчивающихся на Y? Моя причина этого заключается в том, что если вам нужно найти и заменить, например, замену «company» на «vendor», то «company» будет соответствовать формам единственного и множественного числа (« company» и « company s»), тогда как если множественное число было написано правильно, вам придется сделать два отдельных поиска.

SHNC
источник
8
А как насчет детей, мышей, ножей, волков, мужчин, женщин, жен и зубов? Все действительно для того, чтобы избежать страшных «двух отдельных поисков» .
Тулаинс Кордова
3
Я неравнодушен к волкам по отношению к волкам сам ...
Джимми Хоффа
2
Вы действительно планируете очень часто переименовывать идентификаторы в вашем рабочем процессе? Кажется, немного излишне разбираться со всей когнитивной ошибочностью введенных в код имен с ошибками только для поддержки функции, которая может никогда не использоваться.
Кент А.
10
Поверьте, вы не хотите применять операцию поиска и замены над большой кодовой базой для слова типа «компания» без ограничения «только для полных слов». Таким образом, вам придется использовать два отдельных поиска, либо.
Док Браун
2
Два. Отделить. Поисковые запросы.
Тулаинс Кордова

Ответы:

24

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

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

Дэвид Арно
источник
11
И с улучшением инструментов рефакторинга глобальный поиск и замена, основанные только на тексте, становятся наименее надежным способом переименования идентификатора.
Кент А.
Это не будет проблемой при использовании поиска «только целые слова», как отметил Док Браун.
SHNC
6
@ user3047082, поиск по целому слову тоже не будет соответствовать «companys», что делает весь вопрос довольно бессмысленным ...
David Arno
6

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

javabeano
источник
3
Тот, кто пометил этот ответ как низкое качество: хотя он не дает точного ответа на заданный вопрос, он рассматривает более широкую картину того, почему нужно использовать такую ​​схему именования и лучший способ выполнить ту же задачу. Я проголосовал "выглядит хорошо" на отзыве флага и добавил upvote.
Спасибо, Снеговик. Это человеческая природа, когда ты находишься в неизвестной области, чтобы сформулировать вопрос на основе твоего (неопытного) мышления. Да, хотя я не ответил на реальный вопрос, мое предположение о том, что на самом деле спрашивалось, было основано на других подсказках в этом вопросе. Множество множественных чисел, с которыми я сталкивался, - это инструменты генерации кода, например, XSD-to-POJO, обратный инжиниринг Hibernate / JPA из базы данных и т. Д. По сути, если эти множественные числа находятся в коде, и автору не понравился выбор во множественном числе, то они, скорее всего, не были написаны автором и, скорее всего, были сгенерированы автоматически.
Javabeano
-9

Да! Да! Да! Это имеет смысл сделать это. И я делал это годами.

Раскрытие 1: английский не мой родной язык.

Раскрытие 2: Мои знания грамматики английского языка значительно лучше, чем у среднего носителя языка.

Раскрытие 3: Когда дело доходит до общения с людьми, я - яростная нацистская грамматика.

И теперь, когда эти раскрытия не в порядке, позвольте мне заявить, что английской грамматике нет места в коде. Видите ли, именно поэтому это называется кодом, а не прозой . Предполагается, что он имеет некоторое сходство с языком, понятным людям, с целью читабельности, но кроме этого, в коде нам больше всего нужны не качества прозы; это другие, более технические качества, такие как точность , однозначность и краткость . Вот почему C синтаксис if( x != y ) y++;является более предпочтительным по сравнению с IF X IS NOT EQUAL TO Y THEN ADD 1 TO Y END-IF.синтаксисом Кобола. Предполагаемая желательность компиляторов, которые понимают естественный язык, является ошибкой, и не верьте мне на слово, посмотрите, что скажет по этому поводу О'Эдсгер:Эдсгер В. Дейкстра. О глупости "программирования на естественном языке" .

Другим важным качеством является вычислимость идентификаторов . Тот факт, что вызываемое свойство Colorвсегда может быть прочитано через вызываемый getColor()и записываемый метод, setColor()имеет первостепенное значение. Эти идентификаторы вычисляются по названию свойства, поэтому вам не нужно знать их наизусть. Если бы программист выбрал пару методов, вызываемых getColor()с одной стороны, но colorize()с другой стороны, их коллеги по праву рассмотрели бы этот саботаж. Вот как важен идентификатор вычислимости.

Кроме того, могут быть написаны инструменты программирования (и многие из них были написаны, например, Hibernate ), которые могут вычислять эти имена. Без вычислимости имени идентификатора вам пришлось бы использовать дополнительный синтаксис (например, в Hibernate, дополнительные аннотации), чтобы точно указать каждому инструменту, как создавать каждое отдельное имя идентификатора, или точно, какое специальное имя вы дали каждой сущности.

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

И нравится нам это или нет, это тенденция будущего. Родным языком большинства программистов на планете уже не является английский, и в этом направлении тенденция будет оставаться очень сильной . (Кроме того, я бы даже не хотел ставить деньги на предположение, что английский сейчас является родным языком большинства программистов, работающих в США.) Это люди, которые в значительной степени при попытке вычислить имя коллекции из названия одного экземпляра «компания», просто добавит «s», а форма «компании» даже не придет им в голову. Для огромного и постоянно растущего процента программистов в мире знание особенностей английского языка не добавляет никакой ценности их работе, а лишь усложняет ее.

Майк Накис
источник
7
1. Индексы и индексы являются действительными множественными числами индекса. Вы ошибаетесь, полагая, что верен только один, например, см. Oxforddictionaries.com/definition/english/index . 2. Закрытый X, который может быть прочитан через getX и записан через setX, не является частным; это общественная ценность. 3. Код - это проектный документ. Он информирует компилятор о том, как генерировать «машинный код», но, что более важно, он описывает эту конструкцию так, чтобы ее могли легко прочитать другие люди. Читаемость является одним из двух наиболее важных аспектов кода (другой является тестируемость).
Дэвид Арно,
3
Код написан по двум причинам: для чтения людьми и для выполнения компьютеров. Кто-то скажет, что исходный код написан в первую очередь для того, чтобы его могли прочитать люди, так как большая его часть сразу же компилируется в байт-код, прежде чем компьютер выполнит его. Таким образом, хотя компьютеры могут не заботиться о правильной грамматике, люди, безусловно, заботятся .
Эрик Кинг,
3
Хотя английский может не быть вашим родным языком, он может быть следующим, кто читает ваш код. Это, вероятно, также сбивает с толку других людей, изучающих английский язык.
Энди
2
или ты будешь причинять боль только тем, у кого двойные отношения, Companysкогда это должно быть Companies. В конце концов, весь смысл кода, который мы обычно пишем, заключается в том, чтобы сделать его ближе к естественному языку.
Энди
2
Как бы то ни было, я нахожу эту бумагу полной дерьма. Код находится между естественным языком и байт-кодом. Если бы не облегчение понимания кода человеком, не было бы никакой причины не просто вводить байт-код напрямую.
Энди