Методы обратной связи необходимы в любом языке программирования. В JavaScript вы, вероятно, использовали console.log()
или, возможно, alert()
. В PHP вы можете использовать var_dump()
или print_r()
. В Ruby вы можете использовать debug
или inspect
. Все эти функции позволяют вам отлаживать любое значение и выяснять, что делает ваш код в любой точке логики, где вам нужна помощь.
У Sass есть три директивы для обратной связи с разработчиками. Это @error
, @warn
и @debug
. В этой статье мы рассмотрим, как использовать эти директивы, для каких сценариев они лучше всего подходят и какую обратную связь они могут предоставить другим разработчикам, использующим наш код.
Основной синтаксис и использование
Все эти три директивы имеют одинаковый синтаксис:
@directive "String of text to output.";
Ну, это не совсем так. Три директивы ожидают чего угодно, не обязательно строки. Это означает, что вы можете предупреждать, бросать или отлаживать карту, список, число, строку — в основном все, что вы хотите. Однако, поскольку мы часто используем эти директивы, чтобы дать некоторый контекст по проблеме, мы обычно передаем строку, описывающую ситуацию.
Если вам нужно интерполировать значение переменной в этой строке, вы можете сделать это, используя стандартную интерполяцию Sass ( #{$variable}
), и значение будет напечатано в строке. С помощью этого метода вы можете сообщить разработчику как имя переменной, так и ее текущее значение:
@error "Sorry, but `#{$variable}` is not a valid value for $variable.";
Обратите внимание, что галочки (`) вокруг интерполяции не требуются. Вы можете включить их, потому что они дают разработчику очевидную точку начала / окончания для содержимого переменной.
Если разработчик допускает ошибку при использовании вашего кода Sass, эти директивы отправят указанное сообщение компилятору, а компилятор покажет это сообщение разработчику. Например, приложения с графическим интерфейсом (например, CodeKit ) будут отображать системное уведомление с ошибкой. Некоторые пакеты уведомлений Grunt и Gulp также могут это делать.
Если разработчик компилирует с помощью командной строки (Sass, Compass, Grunt или Gulp), сообщение, скорее всего, попадет в их консоль (Terminal, iTerm2, Putty и т. Д.). Если вы пишете Sass онлайн с помощью Sassmeister или Codepen , вы получите только ограниченную обратную связь, но вы можете получить встроенное уведомление в редакторе или текст в окне вывода.
Теперь, когда мы знаем, как писать сообщения @error
, @warn
и @debug
и где они будут появляться для разработчика, давайте посмотрим на разницу между этими директивами и наилучшим использованием для каждой из них.
Остановите все — директива @error
Директива Sass @error полностью останавливает компилятор Sass и отправляет его строку текста на выход компилятора как фатальную ошибку. Используйте эту директиву, когда вам нужно отправить сообщение, которое немедленно останавливает разработчика и заставляет его немедленно исправить свою ошибку. Это идеально для того, чтобы сообщить разработчику, что он сделал что-то не так или ввел значение, которое совершенно несовместимо. Sass будет содержать номер строки с любой фатальной ошибкой, включая вывод @error
. Директива @error
идеально подходит для проверки аргументов в миксине или функции.
Примечание. Если ваш компилятор старше Sass 3.4 или LibSass 3.1, @error
недоступен. Вы можете использовать эту функцию log()
для эмуляции @error
в более старых версиях Sass.
Например, если вы написали функцию, для расчетов которой используется определенный формат ввода, вы можете проверить ввод и использовать @error
чтобы остановить компилятор и предупредить разработчика, что они допустили ошибку, которая не может быть упущенным Если вы написали функцию, основанную на паре ключ / значение с карты, @error
может убедиться, что ключ, вызываемый с карты, действительно существует.
Этот инструмент управления цветом Sass использует @error
чтобы гарантировать, что разработчик использует только имя цвета, которое является допустимым именем цвета CSS или ключ из связанной карты:
Карта:
$colors: ( brand-red: #c0392b, brand-blue: #2980b9, text-gray: #2c3e50, text-silver: #bdc3c7 );
Функция (упрощенная для краткости):
@function color-variation($color) { @if map-has-key($colors, $color) { @return map-get($colors, $color); } @error "Invalid color name: `#{$color}`."; }
Использование:
.element { color: color-variation(brand-orange); }
Выход:
>> Invalid color name: `brand-orange`. >> Line 9 Column 7 sass/test.scss
В этом примере, если разработчик пытается вызвать функцию color-variation()
со строкой, которая не является ни действительным цветом CSS, ни ключом из карты $colors
, Sass ничего не может сделать, чтобы вывести действительный цвет. Использование @error
дает разработчику конкретную и действенную обратную связь.
Не пропустите это — директива @warn
Директива @warn значительно менее серьезна, чем @error
. Он отправляет компилятору свое сообщение для чтения разработчику, но позволяет компилятору завершить свою работу и написать весь CSS. Хотя @error
подходит для исправления ошибки, которая полностью нарушает функцию или @warn
, @warn
лучше подходит для уведомлений об устаревании или для того, чтобы разработчик следовал определенным рекомендациям.
Примечание. Разработчики Sass, использующие флаг --quiet
при компиляции, не увидят вывод @warn
. Если разработчику абсолютно необходимо увидеть отзывы, которые посылает ваш Sass, @error
на @error
. @warn
редко можно отключить, но это возможно.
Sass также будет содержать номер строки с @warn
чтобы помочь разработчику найти и улучшить любой код, который необходимо отредактировать. Например, у вас может быть библиотека, полная миксинов, и вы планируете отказаться от нескольких миксов в будущем выпуске. Один из способов помочь вашим разработчикам подготовиться к этому изменению — @warn
их о предстоящем устаревании:
// No one should ever prefix border-radius properties 😉 // so let's deprecate this from our imaginary library: @mixin border-radius($radius) { @warn "The `border-radius()` mixin will be deprecated in version 2.0."; -webkit-border-radius: $radius; -moz-border-radius: $radius; -ms-border-radius: $radius; -o-border-radius: $radius; border-radius: $radius; }
Выход:
WARNING: The `border-radius()` mixin will be deprecated in version 2.0. on line 2 of sass/test.scss from line 21 of sass/test.scss
Вы можете увидеть это в действии в этом частичном устаревании от Bourbon Sass.
Еще один хороший пример использования @warn
— соблюдение стандартов командного кода. Вы можете написать функцию, которая может успешно обрабатывать ввод как в пикселях, так и в единицах rem, но вы можете предпочесть, чтобы все в вашей команде использовали rems. Вот пример @warn
чтобы помочь вашим коллегам следовать этому стандарту:
@function do-math($input) { @if unit($input) == "px" { @warn "Please remember to use rem values in the `do-math()` function."; // do px math and @return a value to prevent the function from going any further } // do rem math and @return a value }
Выход:
WARNING: Please remember to use rem values in the `do-math()` function. on line 3 of sass/test.scss from line 12 of sass/test.scss
Если вам было @debug
Директива @debug
Директива Sass @debug является наименее навязчивой из всех трех директив обратной связи. Он выводит значение любого содержащегося в нем выражения Sass (переменная, математика и т. Д.) В консоль разработчика. Это не совсем полезно для библиотек с открытым исходным кодом или командных библиотек. Скорее, @debug
идеально подходит для личной работы по отладке. Если вы в сложном математике и хотите знать, что в данный момент содержится в одной из ваших переменных, используйте @debug
чтобы узнать.
Использование:
$color-blue: #1c94c6; $font-sizes: sm, p, bq, heading, hero; $colors: ( brand-red: #c0392b, brand-blue: #2980b9, text-gray: #2c3e50, text-silver: #bdc3c7 ); .element { @debug $color-blue; // single value @debug $font-sizes; // list @debug $colors; // map @debug 4em * 3; // math expression @debug "My very own string just because."; // string }
Выход:
sass/test.scss:5: DEBUG: #1c94c6 sass/test.scss:6: DEBUG: sm, p, bq, heading, hero sass/test.scss:7: DEBUG: (brand-red: #c0392b, brand-blue: #2980b9, text-gray: #2c3e50, text-silver: #bdc3c7) sass/test.scss:8: DEBUG: 12em sass/test.scss:9: DEBUG: My very own string just because.
Вывод
Программирование в черной дыре без обратной связи было бы ужасно. К счастью, Sass имеет несколько директив, которые могут отправлять отзывы компилятору, чтобы помочь разработчикам избежать ошибок, поддерживать стандарты и устранять неполадки в расширенной логике. Вы можете использовать @error
, @warn
и @debug
чтобы сэкономить время для себя и для всех, кто использует ваш код.
Есть ли у вас творческое использование этих директив? Поделитесь ими в комментариях!