Почему в CSS есть "!" имеют ли они противоположный смысл для использования на языках C?

Например, в JavaScript !important означает "не важно". В CSS это означает "это важно".

Существуют ли другие языки, кроме CSS, где восклицательный знак используется для подтверждения, а не отрицания? Почему "!" выбрано в CSS?

ИЗМЕНИТЬ

Я не знаю, совпадено ли это, но ! является самым ранним несистемным и не-пробельным символом в таблице ASCII (на # 32). С точки зрения синтаксического анализа это ускорило бы?

Ответ 1

! является скорее escape-символом, чем оператором. Это часть important, а не отдельная часть (например, в JavaScript я видел бы это как ! и somevar, тогда как в CSS я вижу это как !important). Итак, это не столько утверждение, сколько вы выразились; просто так бывает, что персонаж, которого они выбрали, бросает перед ключевым словом important.

Кроме того, в языках, не относящихся к программированию, ! часто используется для привлечения внимания к чему-либо, хотя он часто сопровождается каким-либо другим видом формы/символом (например, ⚠), и это, вероятно, является причиной !. Может быть полезно увидеть его как important! или ¡important! (!important просто проще разобрать и набрать, чем альтернативы).

Изменить: Как отметил @mike-samuel: " лексический сканер в разделе грамматики CSS2.1 специфицирует списки !important как один токен ("!"({w}|{comment})*{I}{M}{P}{O}{R}{T}{A}{N}{T} {return IMPORTANT_SYM;}), хотя он допускает пробелы и комментарии между ! и important."

Ответ 2

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

В HTML! является частью объявления (например, <!-- --> для объявления комментария и <!DOCTYPE ..> для объявления типа документа), поэтому у него есть другое значение.

Но опять же CSS не является языком программирования вообще.

И даже среди языков программирования существуют различия. И это имеет смысл. Если бы они были одинаковыми, это был бы только один язык.: D

Ответ 3

Я не знаю, если это совпадение, но! является самым ранним несистемным и не-пробельным символом в таблице ASCII (на # 32). С точки зрения синтаксического анализа это ускорило бы?

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

Обработанные вручную парсеры иногда используют таблицы lookup для классификации токенов на основе первого символа. Например, движок Mozilla JS имеет следующее значение в jsscan.cpp, которое определяет lexer:

static const uint8 firstCharKinds[] = {
/*         0        1        2        3        4        5        6        7        8        9    */
/*   0+ */ _______, _______, _______, _______, _______, _______, _______, _______, _______,   Space,
/*  10+ */     EOL,   Space,   Space,     EOL, _______, _______, _______, _______, _______, _______,
/*  20+ */ _______, _______, _______, _______, _______, _______, _______, _______, _______, _______,
/*  30+ */ _______, _______,   Space, _______,  String, _______,   Ident, _______, _______,  String,
/*  40+ */ OneChar, OneChar, _______,    Plus, OneChar, _______,     Dot, _______,  HexOct,     Dec,
/*  50+ */     Dec,     Dec,     Dec,     Dec,     Dec,     Dec,     Dec,     Dec,   Colon, OneChar,
...

но использование | над ! не позволит вам сделать такую ​​таблицу намного меньше. CSS и HTML являются тяжеловесными, поэтому устройства с ограничением памяти не склонны анализировать CSS и сохранять несколько байтов ('|' - 'z' == 2) в лексере, что не повлияет на производительность браузера значительно.

Ответ 4

Если вы думаете об этом, сортируя свойства в порядке ASCII, все, начиная с "!" появится первым. Я предполагаю, что проще было разобрать этот способ.

Ответ 5

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

И, возможно, это решение раскладки клавиатуры. На немецких клавиатурах некоторые маркеры сложнее напечатать, чем на клавиатурах englisch {, например, Alt Gr 7. ! то же самое на немецких keyboads, что и на английских. Кто-то, возможно, помиловал иностранных людей. Опять угадайте.