Использование специальных символов в именах функций
в Ruby стандартным соглашением является использование вопросительного знака в конце имени метода, чтобы указать, что метод возвращает логический результат:
[].empty? #=> true
другим стандартным соглашением является завершение имени метода восклицательным знаком, если метод является деструктивным (то есть он изменяет исходные данные):
mylist.sort! # sort mylist in-place
недавно я видел эти же соглашения, используемые в схеме. Что заставляет меня задуматься, какие другие языки используют / поддерживают эту конвенцию? Есть ли другие специальные символы, которые обычно используются для именования на тех или иных языках?
4 ответов
ответ, конечно, специфичен для языка (и языковой культуры).
например, в зависимости от языка, подходят все следующие: пустой-p, пустой?, пусто, is_empty или isEmpty. (Эти примеры, конечно, не включительно).
примеры в исходном вопросе исходят от Ruby, где такое использование ? и ! для завершения имена методов, где это уместно, принимаются. Это принятие приходит от 1) охотно доступный как терминаторы символа в грамматика 2) использовать ? и ! в стандартной библиотеке. Однако следует отметить, что ! не используется повсеместно, чтобы подразумевать "побочный эффект" и, как правило, присутствует только на альтернативные формы: Save/сохранить!, сортировка/сортировка!, п. Есть огромное количество методов, которые выполняют побочные эффекты, которые не имеют ! префикс.
лично, если бы я разрабатывал язык, я бы позволил ?, ! и", чтобы быть допустимым без кавычек конечные символы в именах символов. Несмотря на то, что некоторые языки позволяют полностью избежать символов, таких как Scala, таких символов обычно избегают, потому что больно цитировать их для использования.
When in Rome...
- Scala - `empty?` or empty_? (not common)
- C/C++/JS/Java/Python/Perl - no ? or ! in identifiers; JS/Java allow $; $ is a sigil in Perl
- C/C++/Perl/JS - hands up in the air?
- C# - IsEmpty (method or property) or Empty (property)
- Python - is_empty or isEmpty per Guido-guide (although usually __len__ protocol:
if not len(foo): "empty!"
) - Java-isEmpty на руководство по языку
- Ruby-специальный трейлинг ? и ! (цитата?)
- JS-косвенный доступ к идентификатору: obj ["пустой?"] (не часто для этого)
- " Lisp " (обычный): пустой-p для предиката; вариации в reader/quoting
рады видеть исправления и / или дополнения-это всего лишь капля в море.
Я не большой поклонник специальных символов в именах функций, но тогда я также буду бить до смерти, с палкой мокрого сельдерея, чтобы дразнить боль, любой, кого я нахожу, помещая пробелы в имена файлов: -)
на ?
вариант можно так же легко сделать с чем-то вроде isEmpty()
и !
вариант sortInPlace()
.
английский язык является очень адаптивным языком, даже без пунктуации.
в любом случае, мои языки выбора (C и Java) используют пунктуация для всех других вещей. Наличие их в идентификаторах также сделало бы лексический анализ кошмаром.
добавление " @ " к имени метода (или любому идентификатору) в C# позволяет вам назвать этот метод С обычно зарезервированным ключевым словом.
void null() {}
// Invalid token 'null' in class, struct, or interface member declaration
void @null()
// compiles
Не делайте этого; это в основном для машинного кода, например наборов данных. страница MSDN по этой теме.
Если вы считаете Javascript языком, многие фреймворки, похоже, используют символ " $ "для обозначения" селектора"; например, можно использовать $("id-of-some-item")
в прототип.js или $("#id-of-some-item")
в jQuery выбрать тег, который был написан <div id="id-of-some-item">
. Использование этих функций выбора на самом деле довольно сложно и мощно (если вам интересно, ознакомьтесь с их вспомогательной документацией по адресу prototypejs.org и jquery.com), но они сводятся к тому, что я считаю семантически похожим на то, что вы указали.
опять же, это предполагает, что вы считаете Javascript языком.