Когда мне следует использовать символ доллара ($) в имени переменной?

Символ доллара ($) является допустимым символом для имени переменной, например String superSecretFormula$;, но когда мы говорим о соглашениях об именах, когда я должен использовать этот символ?

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

6 ответов

Решение

Ваш вопрос помечен тегом Java, но похоже, что вы спрашиваете о символах типа, которые все еще поддерживаются в Visual Basic, но в настоящее время широко не используются (и долгое время).

Это немного субъективно, но я думаю, что будет справедливо сказать: никогда

Один сценарий, в котором вы можете захотеть добавить префикс имени переменной к $ это при написании кода JavaScript для различения объектов jQuery.

редактировать

Относительно запуска имени переменной с $, уроки Oracle Java говорят нам:

Имя переменной может быть любым допустимым идентификатором - неограниченная последовательность букв и цифр Unicode, начинающаяся с буквы, знака доллара "$"или знак подчеркивания"_Msgstr "Соглашение состоит в том, чтобы всегда начинать имена переменных с буквы, а не"$" или же "_".

Из спецификации языка Java для идентификаторов:

$ символ должен использоваться только в механически сгенерированном исходном коде или, редко, для доступа к уже существующим именам в устаревших системах.

Теоретически вы можете использовать знак доллара в именах переменных, но это настоятельно не рекомендуется, потому что этот символ используется внутри компилятора (например, имя внутреннего или анонимного класса).

Пожалуйста, обратитесь к двум связанным вопросам о потоке стека: что означает $ в имени переменной? и имя класса Java, содержащее знак доллара, не компилируется, если присутствует внутренний класс

Никогда

Макдауэлл процитировал JLS, вот пример, который не компилируется в Oracle JDK 1.8.0_45:

public class Assert {
    static final boolean $assertionsDisabled = false;
    public static void main(String[] args) {
        assert System.currentTimeMillis() == 0L;
    }
}

Проблема в том, что javac генерирует поле $assertionsDisabled реализовать assert, который конфликтует с нашей областью, и javac говорит:

the symbol $assertionsDisabled conflicts with a compile synthesized symbol

Смотрите также: /questions/5872701/chto-delaet-klyuchevoe-slovo-java-assert-i-kogda-ono-dolzhno-ispolzovatsya/5872719#5872719

Я согласен с тем, что в целом следует избегать использования специального символа $, как объяснил Ричард. Тем не менее, я помню использование $ для определения jQuery-подобного селектора в проекте реактора. Я думаю, что с осторожностью символ $ может помочь определить некоторые прекрасные API в Java.

В Java я использую "_" в качестве префикса к частной нестатической переменной или полям класса, а "$" - в качестве префикса к статической переменной частного класса.

Это лучше, чем использование префикса "m", потому что он не блокирует строку чтения. Вы, очевидно, не начнете читать "_" или "$", когда начнете читать переменное слово, верно? Как _addressMap или $ addressMap, но с m, как в Map mAddressMap, это может сбивать с толку в тот момент, когда вы начинаете его читать.

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

Другие вопросы по тегам