Почему плохо начинать имя переменной со знака доллара в C ++ / Java и тому подобное? - PullRequest
3 голосов
/ 01 мая 2011

Почему плохо начинать имя переменной со знака доллара в C ++ / Java и аналогичных, например, в PHP?

Редактировать: Есть ли риски?

Ответы [ 8 ]

4 голосов
/ 01 мая 2011

В C ++ это непереносимо. Для начала идентификатора должны быть приемлемы только те символы, о которых говорится в стандарте (раздел [lex.name]). Это прописные и строчные буквы, а также подчеркивание.

4 голосов
/ 01 мая 2011

В Java использование $ в переменных допустимо, но определенно плохая идея.

Если вы сделаете это, есть риск, что вы случайно будете использовать имя, которое сталкивается с именем, которое используется самим компилятором или каким-либо генератором кода. Результатом будут неожиданные сбои компиляции или времени выполнения, которые могут быть особенно трудными для диагностики ...

Существует также потенциальный риск того, что ваше (неправильное) использование $ вызовет проблемы в будущих версиях Java. Использование компилятором / средой исполнения $ в будущем может измениться, что приведет к сбою вашего вредоносного кода.

Только не делай этого. Или, по крайней мере, не делайте этого, если вы не пишете генератор ... , и вы не знаете, во что ввязываетесь .

2 голосов
/ 01 мая 2011

В Java $ используется во внутренних именах классов и, возможно, также в некоторых "синтетических" именах методов.По сути, любой код, который компилятор должен генерировать для обработки внутренних классов, будет содержать $.Использование $, по крайней мере, может привести к путанице из-за этого.Вообще говоря, вам никогда не нужно видеть $ в имени переменной / метода / класса в Java.

2 голосов
/ 01 мая 2011

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

Похоже, что в C ++ идентификаторы могут использовать знаки доллара в качестве расширения, но это не является частью стандарта.

2 голосов
/ 01 мая 2011

Для Java от этот пост

Соглашение, однако, всегда начать ваши имена переменных с буква, а не "$" или "_". Дополнительно, знак доллара, по конвенция, никогда не используется вообще. Вы может найти некоторые ситуации, когда автоматически сгенерированные имена будут содержать знак доллара, но ваши имена переменных всегда следует избегать его использования. подобное соглашение существует для символ подчеркивания; пока это технически законно, чтобы начать имя переменной с "_", это практика не рекомендуется.

* * 1010

Я не думаю, что есть какие-либо риски / побочные эффекты; это просто обескураживает.

0 голосов

Потому что JLS 8 3.8 говорит так:

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

И вы действительно можете генерировать код, который не компилируется, например, в 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, что противоречит нашему полю.

Смотри также: https://stackoverflow.com/a/29439538/895245

0 голосов
/ 01 мая 2011

Основные причины, которые я могу придумать, здесь.В Java имена внутренних классов создаются со знаком $.Кроме того, знак $ используется для переменных env в большинстве Oses, поэтому это может привести к путанице и может повлиять на системные переменные.

0 голосов
/ 01 мая 2011

Потому что и в C ++, и в Java это было бы синтаксической ошибкой (в случае C ++) или плохим стилем (в случае Java).Ни одному из этих языков не нужно указывать переменные, и это неправильно.Запуск переменных со специальным символом (например, «$») значительно упрощает работу языковой системы (что важно для интерпретируемых языков, таких как PHP), но значительно усложняет жизнь программиста, поскольку они должны вводить все эти символы$ 'символов.Поэтому большинство языков (даже большинство интерпретируемых) не требуют их.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...