Иногда наиболее логичным именем чего-либо (например, переменной) является зарезервированное ключевое слово в выбранном языке или среде. Когда нет одинаково подходящего синонима, как его назвать?
Я полагаю, что для этой проблемы есть эвристика наилучшей практики. Они могут быть предоставлены создателями или руководителями языков программирования и сред. Например, если python.org (или Гвидо ван Россум) говорит, как с этим обращаться в Python, это было бы хорошим руководством в моей книге. Ссылка на MSDN о том, как с этим справляться в C #, тоже подойдет.
В качестве альтернативы, рекомендации, предоставляемые основными авторитетами в разработке программного обеспечения, также должны быть ценными. Возможно, у Google / Alphabet есть хорошее руководство по стилю, которое учит нас, как с этим бороться?
Вот только пример: в языке C # «default» - зарезервированное ключевое слово. Когда я использую enum, я могу назвать значение по умолчанию "default" (аналогично операторам "switch"), но не могу.
(C # чувствителен к регистру, и константы перечисления должны быть написаны заглавными буквами, поэтому здесь по умолчанию очевиден «Default», но давайте предположим, что наше текущее руководство по стилю предписывает, чтобы все константы перечисления были в нижнем регистре.)
Мы могли бы рассмотреть слово «defaultus» ", но это не соответствует принципу наименьшего удивления . Мы также должны рассмотреть «стандартный» и «начальный», но, к сожалению, «по умолчанию» - это слово, которое точно передает его назначение в этой ситуации.
clazz
, фактически является стандартом де-факто. По сути, это часть соглашения об именах платформ. Делать что-либо еще было бы нарушением ожиданий того, что другие могут прочитать ваш код, поэтому делать это следует только в случае крайней необходимости.Ответы:
Для опции enum вы должны использовать case case вроде
Default
. Поскольку C # чувствителен к регистру, он не будет конфликтовать с зарезервированным ключевым словом. См. Руководство по именованию .net .Поскольку все открытые члены должны иметь регистр заголовка в .net, а все зарезервированные имена - строчные, вам не следует сталкиваться с этим, за исключением локальных переменных (включая параметры). И местные жители обычно имеют имена или фразы в качестве имен, поэтому довольно редко наиболее естественное имя сталкивается с ключевым словом. Например.
defaultValue
как правило, было бы более естественным именем, чемdefault
. Так что на практике это не большая проблема.В C # вы можете использовать
@
префикс " " для экранирования зарезервированных ключевых слов, чтобы их можно было использовать в качестве идентификаторов (например@default
). Но это следует использовать только в том случае, если у вас действительно нет другого выбора, т.е. если вы взаимодействуете со сторонней библиотекой, которая использует зарезервированные ключевые слова в качестве идентификатора.Конечно, другие языки имеют разный синтаксис и ключевые слова и, следовательно, разные решения этой проблемы.
В SQL достаточно много ключевых слов, но очень часто просто экранировать идентификаторы, например
[Table]
. Некоторые даже делают это для всех идентификаторов, независимо от того, сталкиваются ли они с ключевым словом или нет. (В конце концов, ключевое слово может быть введено в будущем!)Powershell (и множество других языков сценариев) ставит перед всеми переменными символ, такой как $, что означает, что они никогда не столкнутся с ключевыми словами.
В Лиспе вообще нет ключевых слов, по крайней мере, в общепринятом смысле этого слова.
У Python есть официально признанное соглашение в PEP-8 :
Некоторые языки, такие как Brainfuck или Whitespace, вообще избегают определения слов, элегантно обходя проблему.
Короче говоря, не существует независимого от языка ответа на ваш вопрос, поскольку он сильно зависит от синтаксиса и соглашений конкретного языка.
источник
#define
, но правый операнд всегда интерпретировался бы как регистрозависимый идентификатор. Это позволило бы разрешить многие виды конфликтов именования (включая для языков без учета регистра импорт идентичных символов, кроме регистра).Я хотел бы добавить подчеркивание (default_)
Плюсы:
Почему мне не нравятся другие решения:
Синоним:
Добавление / добавление слова:
Смена букв (клац вместо класса):
Добавление номера (по умолчанию1):
Добавление / добавление письма:
Выход из ключевого слова (@default (c #), `default` (scala))
Когда бы я не использовал его:
источник
klass
найти переменную, гдеclass
зарезервированное слово. Я никогда не видел,defawlt
но это та же идея. Я бы предпочелdefault_
(и, возможно,class_
если бы не растоптал какие-либо установленные соглашения при этом).Значение по умолчанию, вероятно, не является полезным значением перечисления. Он представляет поведение, которое может меняться в зависимости от контекста, в котором оно используется.
При этом, если ваш язык чувствителен к регистру, используйте для слова другой регистр. (По умолчанию против по умолчанию)
Или, еще лучше, приложите дополнительные усилия, чтобы набрать еще несколько букв и назвать его DefaultValue.
источник
enum ErrorHandlingLevel { Default = 0, ... }
противenum ErrorHandlingLevel { None = 0, ... }
. Во втором примере факт, которыйNone
является значением по умолчанию, может быть известен путем установки значения enum в 0, использования xmldoc или явно в коде. Вы получаете дополнительное преимущество, зная, что это означает, когда объектErrorHandlingLevel
установленNone
. Сравните это с проверкой объекта сErrorHandlingLevel
установленным по умолчанию.Я настоятельно рекомендую НЕ изменять соглашение об именах локально (или добавлять бессмысленные символы) с целью устранения неоднозначности (как было предложено в других постах). Это создает путаницу, если намерение не очевидно, и может вызвать вопросы о том, почему он был назван так. Это можно решить без этого.
В любом случае должно быть возможно использовать слово с синонимичным значением или сделать имя более конкретным (или даже многословным). Даже если это может привести к повторению контекста, это может быть лучшим решением.
Например, допустим, у вас есть перечисление,
Mode
которое должно представлять значение по умолчанию, как в вашем случае. Называть егоdefault_mode
может показаться не лучшим из-за повторения, но это позволяет избежать двусмысленности при передаче желаемого значения.источник
Вам нужно будет использовать другое или измененное слово (слова), это понятно.
Так что это обычно означает либо
Другой фактор, который нужно определить, - это то, как объединить несколько слов, и варианты обычно
Мое предложение состоит в том, чтобы использовать префикс или суффикс и подчеркивание / тире, например
local_default
имеет преимущество в том, что все местные жители выровнены и, следовательно, выделяются быстро, но недостатком является то, что вам всегда нужно читать вторую часть, чтобы получить уникальное имя.default_local
имеет обратное преимущество: быстрое распознавание уникального имени переменной, но не всегда так легко сгруппировать визуально.Вот пара примеров для подхода domain_specific, который я видел:
vehicle_model
вместоmodel
которого было зарезервированное слово;room_table
для таблицы SQL какtable
зарезервированное слово.Два других варианта, которые я видел, используют языки или скрипты:
источник
words_with_underscores-or-dashes
с двумя именами -snake_case
при использовании подчеркивания иkebab-case
при использовании тире. Я нашел последнее смешным.Очевидно, сделайте все возможное, чтобы избежать этой ситуации. Я пишу программное обеспечение с конца 1970-х годов, и времена, когда мне действительно приходилось выдумывать зарезервированное слово, намного меньше десяти, возможно, ближе к пяти.
Вы можете сделать много вещей, например удвоить первую или последнюю букву (
reservedd
) или добавить начальное или конечное подчеркивание (reserved_
). То, что подходит, будет во многом зависеть от используемых вами соглашений, особенно в отношении начальных или конечных подчеркиваний. Также старайтесь не делать вещи с делом, которое может быть неправильно истолковано людьми (например, использовать,Reserved
когда оно отличается отreserved
).После того, как вы выбрали что-то, включите это в свои правила кодирования, убедитесь, что люди знают об этом и что оно используется последовательно. Я даже зашел так далеко, что добавил комментарий-напоминание, чтобы читатели не думали, что это опечатка, и знают, что увидят его снова:
источник
classs
?)В C # вы можете добавить имя идентификатора с помощью @ . Это говорит компилятору обрабатывать имя как имя идентификатора, а не как возможное ключевое слово.
источник