Использование специальных символов в именах функций

в 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 языком.