Почему в именах переменных не может быть пробелов? [дубликат]

этот вопрос уже есть ответ здесь:

по теме: Почему имена переменных не могут начинаться с чисел?

есть ли техническая причина, по которой пробелы не разрешены в именах переменных или это сводится к конвенция?

например, что мешает нам сделать что-то подобное?:

average score = sum of scores / number of scores

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

3 ответов


нет фундаментальной причина, помимо решений языковых дизайнеров и истории идентификаторов с одним токеном. Некоторые языки на самом деле позволяют мульти-маркерные идентификаторы: язык выражения MultiMedia Fusion, некоторые электронные таблицы Mac/ноутбук программное обеспечение, имя которого ускользает от меня, и я уверен в других. Однако есть несколько соображений, которые делают проблему нетривиальной.

предполагая, что язык является свободной формой, вам нужен канонический представление, так что идентификатор типа account name обрабатывается одинаково независимо от пробелов. Компилятору, вероятно, придется использовать какое-то соглашение, чтобы угодить компоновщику. Затем вы должны рассмотреть влияние этого на экспорт-почему C++ есть extern "C" спецификатор связи для отключения искажения.

ключевые слова являются проблемой, как вы видели. Большинство языков семейства C имеют лексический класс ключевых слов, отличный от идентификаторов, которые не зависят от контекста. Нельзя назовите переменную class в C++. Это можно решить, запретив ключевые слова в мульти-маркерных идентификаторах:

if account age < 13 then child account = true;

здесь if и then не может быть частью идентификатора, так что нет никакой двусмысленности с account age и child account. Кроме того, вы можете требовать пунктуации везде:

if (account age < 13) {
  child account = true;
}

последний вариант-сделать ключевые слова повсеместно контекстная ведущих таких чудовищ как:

IF IF = THEN THEN ELSE = THEN ELSE THEN = ELSE

самая большая проблема в том, что сопоставление-чрезвычайно мощная синтаксическая конструкция, и вы не хотите занимать ее легко. Разрешение мульти-маркерных идентификаторов предотвращает использование сопоставления для других целей, таких как применение функций или композиция. Гораздо лучше, я думаю, просто позволить самому nonwhitespace символов и тем самым разрешить такие идентификаторы, как canonical-venomous-frobnicator. Все еще много читаемого, но с меньшим количеством возможностей для двусмысленности.


Я думаю, что это потому, что разработчики языка следуют этой конвенции.

Я искал в Google и обнаружил, что при именовании переменной это правило, которое следует при именовании переменной.

некоторые ссылки приведены ниже:-

следующие правила применяются к именам переменных:

  • имена переменных не могут содержать пробелы.

имена переменных чувствительны к регистру. Имя переменной может быть любым юридическим идентификатор-последовательность букв Юникода неограниченной длины и цифры, начинающиеся с буквы, знака доллара"$", или символ подчеркивания "". Конвенция, однако, всегда начинать ваши имена переменных с буквой, А Не " $ "или"". Кроме того, символ знака доллара, по соглашению, никогда не используется вообще. Вы можете найдите ситуации, в которых автоматически сгенерированные имена будут содержать знак доллара, но ваши имена переменных всегда должны избегать его использования. Ля аналогичное соглашение существует для символа подчеркивания; в то время как формально законно начинать имя переменной с "_", это практика не поощряется. белое пространство не допускается.

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

также проверить есть ли какой-либо язык, который допускает пробелы в именах переменных


Это вынуждено от языкового проектирования. Компилятор должен выяснить значение слов. Компилятор работает по методу "State Machine", и ему нужно различать ключевые слова. Возможно, размещение имен переменных в " ["и"] " даст нам некоторое решение(например, SQL). Но будет сложнее использовать его в кодировании...