Почему в CSS есть «!»в имеют противоположное значение для его использования в языках на основе C? - PullRequest
11 голосов
/ 29 марта 2012

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

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

EDIT

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

Ответы [ 5 ]

4 голосов
/ 29 марта 2012

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

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

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

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

3 голосов
/ 29 марта 2012

! больше экранирующий символ, чем оператор.Это часть 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 голосов
/ 29 марта 2012

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

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

Свернутые вручную парсеры иногда используют таблицы поиска для классификации токенов на основе первого символа. Например, в движке 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) в лексере не окажет существенного влияния на производительность браузера.

0 голосов
/ 29 марта 2012

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

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

0 голосов
/ 29 марта 2012

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

...