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