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


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

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

РЕДАКТИРОВАТЬ

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


11


источник


Ответы:


! является скорее 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«.


3



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

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

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

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


4



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

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

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

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) в лексере не повлияет на эффективность браузера.


2



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


0



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

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


0