Yamato DaiwaFrontend (2.0.0-beta.4)

Проверка типов значений

Строки

isEmptyString

Возвращает true тогда и только тогда, когда значением параметра является пустая строка, в противном случае возвращает false.

Ничего особенного, но данная функция может быть востребована при разработке других Stylus-функций и примесей. Данная функция даже пригодилась при реализации другой проверяющий значения функцииisDimensionlessQuantity:

isNonEmptyString

Возвращает true тогда и только тогда, когда значением параметра является непустая строка, в противном случае возвращает false.

Распространено также использование !isNonEmptyString(X) — хотя двойное отрицание (включая частицу «non») трудно для восприятия, отсеивание всего, кроме непустых строк востребовано на практике.

isString

Возвращает true, если значением параметра является строка (пустая или же нет), в противном случае возвращает false. Более короткий вариант typeof(value) == "string".

Величины

В отличие от большинства языков программирования Stylus, будучи CSS-препроцессором, оперирует не просто с числами, а с величинамиразмерными («dimensional quantity») или же безразмерными («dimensionless quantity»). Для обоих типов величин typeof() вернёт "unit", потому когда наличие или отсутствие размерности критично, потребуется дополнительная проверка. Для подобных целей среди приведённых ниже функций есть isDimensionalQuantity и isDimensionlessQuantity, а isDimensionalOrDimensionlessQuantity хотя и является эквивалентом typeof(x) == "unit", имеет имя, из прямого перевода которого чётко понятно, что true будет возвращено как для размерных величин, так и безразмерных величин.

isDimensionalOrDimensionlessQuantity

Возвращает true тогда и только тогда, когда значением параметра является размерная или безразмерная величина, в противном случае возвращает false. Работает так же, как и typeof(value) == "unit", и хотя имеет длинное имя, разрешает неоднозначность по поводу того, на размерную или безразмерную величину осуществляется проверка (в данном случае на обе).

isDimensionalQuantity

Возвращает true тогда и только тогда, когда значением параметра является размерная величина, в противном случае возвращает false, при этом необходимо указать через второй параметр, считать ли 0 размерной величиной. Как известно из основ CSS, этот язык описания стилей позволяет опускать единицы изменения, если величина равна 0 (другими словами, 0 эквивалентен 0px, 0rem и сочетаниям 0 с любым другими единицами измерения, поддерживаемыми на данный момент в CSS).

В примере выше через первый параметр переданы фиксированные значения, но на практике в большинстве случаев значение будет динамическое, то есть неизвестным заранее, чем и объясняется обязательность второго параметра.

isDimensionlessQuantity

Возвращает true, если значением параметра является безразмерная величина, в противном случае возвращает false, при этом 0 всегда считается безразмерным.

isNaturalNumber

Возвращает true тогда и только тогда когда значением параметра является безразмерная величина, представляющая собой натуральное число.

Булевские значения

Будучи языком, не имеющим встроенную безопасность типов, Stylus имеет автоматическое приведение небулевских значений к булевским (например, в условных выражениях). Однако поведение Stylus иногда отличается от JavaScript-подобного, к которому привыкли веб-программисты. Например, проверка if someVariable даст результат true (в языке Stylus) даже если переменная someVariable не инициализирована.

Для того, чтобы избежать неожиданных багов, рекомендуется сравнивать в явном виде someVariable == true или someVariable == false, но isTrue(someVariable) и isFalse(someVariable), предлагаемые данной библиотекой — альтернативы.

isBoolean

Короткая альтернатива сравнительного выражения typeof(x) == "boolean", где xпроизвольная переменная, пусть даже не объявленная.

isFalse

Альтернатива сравнительного выражения x == false, где xпроизвольная переменная, пусть даже не объявленная.

isTrue

Альтернатива сравнительного выражения x == true, где xпроизвольная переменная, пусть даже не объявленная.

Пустые значения

В Stylus имеются недоработки, связанные с пустыми значениями (null). Эта группа функций даёт больший уровень безопасности при работе с такими значениями. Если Вам нужна более конкретная информация, то данная тема разобрана в теоретически справке ниже.

Теоретический минимум: пустые значения в Stylus

Ключевое слово `null`

Рассмотрим следующий код:

Пока что Stylus работает как ожидалось:

inspect: null
inspect: 'null'
inspect: true
inspect: true

Несуществующее свойство объекта

Рассмотрим следующий код:

Пока что №[+ImportantEntity--YDID Stylus] работает как ожидалось:

inspect: null
inspect: 'null'
inspect: true
inspect: true

Функция или примесь только с остаточными параметрами

Рассмотрим следующий код:

Здесь начинаются аномалии. Хотя выражение sample3 == null ложно, выражение typeof(sample3) == "null" правдиво:

inspect: ()
inspect: 'null'
inspect: false
inspect: true

Функция или примесь с остаточными параметрами на неначальной позиции

Рассмотрим следующий код:

Имеет имеем следующий вывод в консоль:

inspect: "Checkpoint1"
inspect: "Checkpoint2"
inspect: 'null'
inspect: false
inspect: true

Здесь мы можем видеть следующие аномалии:

  • p(sample4) проигнорировано.
  • Хотя typeof(sample4) == "null" правдиво, sample4 == null при этом ложно.

Из проведённых выше экспериментов можно сделать вывод, что прямое сравнение с null небезопасно. Вместо этого, следует сравнивать явно с помощью typeof(x) == "null" или typeof(x) == "null", но предлагаемые YDF функции isNull/isNotNull являются более короткими альтернативами.

isNotNull

Возвращает true при любых значениях параметра кроме null, а при null возвращает false. Не является эквивалентом x != null, потому что, как было показано выше, прямое сравнение с null работает не всегда как ожидается

isNull

Возвращает true тогда и только тогда когда значением параметра является null, а при любых других значениях — false. Не является эквивалентом x != null, потому что, как было показано выше, прямое сравнение с null работает не всегда как ожидается

Другие

isCalcExpression

Возвращает true тогда и только тогда, когда переданный параметр представляет собой Stylus-литерал (удовлетворяет условию typeof(value) == "literal"), при этом начинается с calc(, в остальных случаях возвращает false. Хотя отдельного типа данных для calc-выражений в Stylus нет, проанализировать, является ли литерал calc-выражением можно, что данная функция и делает.

isFunction

Возвращает true тогда и только тогда, когда переданный параметр является функцией, в остальных случаях возвращает false. Короткая альтернатива typeof(x) == "function".

isIdentifier

Возвращает true тогда и только тогда, когда переданный параметр является Stylus-идентификатором, в остальных случаях возвращает false. Эквивалент typeof(x) == "ident".

isObject

Возвращает true тогда и только тогда, когда переданный параметр является объектом, в остальных случаях возвращает false. Короткая альтернатива typeof(x) == "object".

Внешние ссылки