HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>Если вы изучали любой язык программирования, то знаете, что одним из самых распространенных элементов в них является условная конструкция if/else. Что же эта конструкция позволяет делать? Условная конструкция позволяет выполнять тот или иной участок кода в зависимости от того, является ли истинным условие внутри этой конструкции.</p>
1 <p>Если вы изучали любой язык программирования, то знаете, что одним из самых распространенных элементов в них является условная конструкция if/else. Что же эта конструкция позволяет делать? Условная конструкция позволяет выполнять тот или иной участок кода в зависимости от того, является ли истинным условие внутри этой конструкции.</p>
2 <p>Перед тем, как пойти дальше разберемся с понятиями, которые были введены выше:</p>
2 <p>Перед тем, как пойти дальше разберемся с понятиями, которые были введены выше:</p>
3 <ul><li><em>Условная конструкция</em>- конструкция, которая направляет работу скрипта по одному из нескольких путей, в зависимости от того, истинно ли условие внутри конструкции.</li>
3 <ul><li><em>Условная конструкция</em>- конструкция, которая направляет работу скрипта по одному из нескольких путей, в зависимости от того, истинно ли условие внутри конструкции.</li>
4 <li><em>Условие</em>- любое выражение, которое можно свести либо к истинности, либо ко лжи. Например, выражение<em>2 + 2 = 4</em>истинно, а<em>2 + 5 = 1</em>- нет.</li>
4 <li><em>Условие</em>- любое выражение, которое можно свести либо к истинности, либо ко лжи. Например, выражение<em>2 + 2 = 4</em>истинно, а<em>2 + 5 = 1</em>- нет.</li>
5 </ul><p>Разберем простой пример с миксинами. Пускай дизайнер прислал нам макет с двумя разными цветовыми схемами: светлой и темной. В зависимости от того, что указано в настройках проекта нам надо использовать или одну, или другую цветовую схему.</p>
5 </ul><p>Разберем простой пример с миксинами. Пускай дизайнер прислал нам макет с двумя разными цветовыми схемами: светлой и темной. В зависимости от того, что указано в настройках проекта нам надо использовать или одну, или другую цветовую схему.</p>
6 <p>Опишем в миксине card обе цветовые схемы, которые прислал дизайнер. Попробуем сделать две схемы с теми знаниями, которые мы имеем сейчас:</p>
6 <p>Опишем в миксине card обе цветовые схемы, которые прислал дизайнер. Попробуем сделать две схемы с теми знаниями, которые мы имеем сейчас:</p>
7 <p>Получилась достаточно грубая конструкция. Выбор цветовой схемы мы возлагаем на классы light и dark. Получается, что для всех элементов придется использовать такие конструкции и добавлять классы. Это приведет к ужасной путанице и постоянным проблемам по причине забывания проставления класса для элемента. Подход полностью рабочий, но создаст дополнительные проблемы. Возможно еще ввести более глобальные классы light-theme или dark-theme для body, но таким образом мы получим большие участки кода с разными оформлениями, за которыми также тяжело следить.</p>
7 <p>Получилась достаточно грубая конструкция. Выбор цветовой схемы мы возлагаем на классы light и dark. Получается, что для всех элементов придется использовать такие конструкции и добавлять классы. Это приведет к ужасной путанице и постоянным проблемам по причине забывания проставления класса для элемента. Подход полностью рабочий, но создаст дополнительные проблемы. Возможно еще ввести более глобальные классы light-theme или dark-theme для body, но таким образом мы получим большие участки кода с разными оформлениями, за которыми также тяжело следить.</p>
8 <p>Как здесь может помочь<em>SASS</em>? Мы можем использовать условные конструкции и объявить изначальную настройку темы проекта в виде отдельной переменной заранее. В дальнейшем эта настройка будет влиять на весь проект целиком. Согласитесь, что удобнее управлять выбором темы изменением всего одной переменной. Как же этого добиться?</p>
8 <p>Как здесь может помочь<em>SASS</em>? Мы можем использовать условные конструкции и объявить изначальную настройку темы проекта в виде отдельной переменной заранее. В дальнейшем эта настройка будет влиять на весь проект целиком. Согласитесь, что удобнее управлять выбором темы изменением всего одной переменной. Как же этого добиться?</p>
9 <p>Для этого введем переменную $dark-mode со значением true. Как мы помним, это<em>булевый тип данных</em>, который может принимать одно из двух значений. В данном случае значение true обозначает истинность. Значит, мы хотим использовать темную тему.</p>
9 <p>Для этого введем переменную $dark-mode со значением true. Как мы помним, это<em>булевый тип данных</em>, который может принимать одно из двух значений. В данном случае значение true обозначает истинность. Значит, мы хотим использовать темную тему.</p>
10 <p>Теперь нам поможет конструкция @if у которой поставим условие на истинность переменной $dark-mode. Это можно сделать с помощью оператора ==. Все такие операторы будут рассмотрены чуть ниже. Вернем наш миксин и добавим условие.</p>
10 <p>Теперь нам поможет конструкция @if у которой поставим условие на истинность переменной $dark-mode. Это можно сделать с помощью оператора ==. Все такие операторы будут рассмотрены чуть ниже. Вернем наш миксин и добавим условие.</p>
11 <p>Что здесь произошло? В самом начале миксина мы определили базовые цвета "по умолчанию". Это были настройки светлой темы. Ниже появилась условная конструкция @if в которой мы проверяем, равно ли значение переменной $dark-mode true. Так как мы установили это значение в самом начале нашего кода, то переменные $primary-color и $text-color внутри миксина card перезапишутся на те, которые указаны в теле условия.</p>
11 <p>Что здесь произошло? В самом начале миксина мы определили базовые цвета "по умолчанию". Это были настройки светлой темы. Ниже появилась условная конструкция @if в которой мы проверяем, равно ли значение переменной $dark-mode true. Так как мы установили это значение в самом начале нашего кода, то переменные $primary-color и $text-color внутри миксина card перезапишутся на те, которые указаны в теле условия.</p>
12 <p>При использовании оператора @if получается одно из двух значений:</p>
12 <p>При использовании оператора @if получается одно из двух значений:</p>
13 <ul><li>true - выражение внутри оператора истинно и тогда мы заходим в тело конструкции @if.</li>
13 <ul><li>true - выражение внутри оператора истинно и тогда мы заходим в тело конструкции @if.</li>
14 <li>false - выражение внутри оператора ложно и тогда мы игнорируем все, что находится внутри конструкции @if.</li>
14 <li>false - выражение внутри оператора ложно и тогда мы игнорируем все, что находится внутри конструкции @if.</li>
15 </ul><p>Результат компиляции файла<em>SASS</em>:</p>
15 </ul><p>Результат компиляции файла<em>SASS</em>:</p>
16 <h2>Операторы сравнения</h2>
16 <h2>Операторы сравнения</h2>
17 <p>В прошлом примере мы увидели один из операторов сравнения ==. Он указывает на равенство левой и правой частей выражения. Если они равны, то возвращается true и компилятор заходит в тело конструкции внутри @if.</p>
17 <p>В прошлом примере мы увидели один из операторов сравнения ==. Он указывает на равенство левой и правой частей выражения. Если они равны, то возвращается true и компилятор заходит в тело конструкции внутри @if.</p>
18 <p>Помимо этого существуют еще несколько операторов сравнения, которые важно знать:</p>
18 <p>Помимо этого существуют еще несколько операторов сравнения, которые важно знать:</p>
19 <ul><li>!= - не равно. Результат полностью противоположен оператору ==. Если левая и правая часть выражения<strong>не равны</strong>, то результат будет true.</li>
19 <ul><li>!= - не равно. Результат полностью противоположен оператору ==. Если левая и правая часть выражения<strong>не равны</strong>, то результат будет true.</li>
20 <li>&gt; - левая часть выражения<strong>больше</strong>правой.</li>
20 <li>&gt; - левая часть выражения<strong>больше</strong>правой.</li>
21 <li>&gt;= - левая часть выражения<strong>больше, либо равна</strong>правой.</li>
21 <li>&gt;= - левая часть выражения<strong>больше, либо равна</strong>правой.</li>
22 <li>&lt; - левая часть выражения<strong>меньше</strong>правой.</li>
22 <li>&lt; - левая часть выражения<strong>меньше</strong>правой.</li>
23 <li>&lt;= - левая часть выражения<strong>меньше, либо равна</strong>правой.</li>
23 <li>&lt;= - левая часть выражения<strong>меньше, либо равна</strong>правой.</li>
24 - </ul><p>Где нам могут понадобиться такие выражения? Предположим, что у нас есть нкоторое значение font-size. Если это значение меньше 16 пикселей, то при ширине viewport до 768px, оно должно быть увеличено в полтора раза.</p>
24 + </ul><p>Где нам могут понадобиться такие выражения? Предположим, что у нас есть некоторое значение font-size. Если это значение меньше 16 пикселей, то при ширине viewport до 768px, оно должно быть увеличено в полтора раза.</p>
25 <p>Если скомпилировать этот<em>SASS</em>файл, то получим следующий<em>CSS</em>код:</p>
25 <p>Если скомпилировать этот<em>SASS</em>файл, то получим следующий<em>CSS</em>код:</p>
26 <p>Теперь предположим, что где-то в проекте мы перезаписывали значение $main-font-size и установили его значение равное<em>16px</em>:</p>
26 <p>Теперь предположим, что где-то в проекте мы перезаписывали значение $main-font-size и установили его значение равное<em>16px</em>:</p>
27 <p>Скомпилируем этот код и получим следующий код<em>CSS</em>:</p>
27 <p>Скомпилируем этот код и получим следующий код<em>CSS</em>:</p>
28 <p>Теперь условие $main-font-size &lt; 16px вернуло false и компилятор не зашел в тело условной конструкции, поэтому код внутри условной конструкции не был обработан.</p>
28 <p>Теперь условие $main-font-size &lt; 16px вернуло false и компилятор не зашел в тело условной конструкции, поэтому код внутри условной конструкции не был обработан.</p>
29 <h2>Логические операторы</h2>
29 <h2>Логические операторы</h2>
30 <p>Помимо операторов сравнения в<em>SASS</em>также существуют и логические операторы. Их намного меньше, не пугайтесь :) Логические операторы позволяют объединять несколько условий в одно большое выражение.</p>
30 <p>Помимо операторов сравнения в<em>SASS</em>также существуют и логические операторы. Их намного меньше, не пугайтесь :) Логические операторы позволяют объединять несколько условий в одно большое выражение.</p>
31 <p>Вернемся к примеру с цветовыми схемами. Предположим, что мы делаем отдельные стили для мобильных устройств, где должна использоваться темная тема сайта. Введем дополнительную переменную, в которой укажем тип устройства. Это поможет задать свойства только для определенной группы устройств и скомпилировать стили для них.</p>
31 <p>Вернемся к примеру с цветовыми схемами. Предположим, что мы делаем отдельные стили для мобильных устройств, где должна использоваться темная тема сайта. Введем дополнительную переменную, в которой укажем тип устройства. Это поможет задать свойства только для определенной группы устройств и скомпилировать стили для них.</p>
32 <p>Каким образом нам проверить, что оба условия для выбора темной темы истинны? Можно создать условную конструкцию внутри условной конструкции (привет фильму "Начало").</p>
32 <p>Каким образом нам проверить, что оба условия для выбора темной темы истинны? Можно создать условную конструкцию внутри условной конструкции (привет фильму "Начало").</p>
33 <p><strong>Осторожно</strong>:<em>не увлекайтесь вложенными условными конструкциями. Такие "лесенки" могут быть очень трудны для чтения. К тому же в них очень просто допустить ошибку при добавлении или удалении условия</em>.</p>
33 <p><strong>Осторожно</strong>:<em>не увлекайтесь вложенными условными конструкциями. Такие "лесенки" могут быть очень трудны для чтения. К тому же в них очень просто допустить ошибку при добавлении или удалении условия</em>.</p>
34 <p>Избавиться от этой лесенки нам поможет логический оператор and. Он объединит оба условия и вернет true при условии, что оба выражения вернут true. Нам достаточно добавить ключевое слово and между двумя выражениями следующим образом:</p>
34 <p>Избавиться от этой лесенки нам поможет логический оператор and. Он объединит оба условия и вернет true при условии, что оба выражения вернут true. Нам достаточно добавить ключевое слово and между двумя выражениями следующим образом:</p>
35 <p>Всего в<em>SASS</em>существует три логических оператора:</p>
35 <p>Всего в<em>SASS</em>существует три логических оператора:</p>
36 <ul><li>and ­- логический оператор<em>"И"</em>. Вернет true, если<strong>оба выражения</strong>истины.</li>
36 <ul><li>and ­- логический оператор<em>"И"</em>. Вернет true, если<strong>оба выражения</strong>истины.</li>
37 <li>or - логический оператор<em>"ИЛИ"</em>. Вернет true, если<strong>хотя бы одно выражение</strong>истинно.</li>
37 <li>or - логический оператор<em>"ИЛИ"</em>. Вернет true, если<strong>хотя бы одно выражение</strong>истинно.</li>
38 <li>not - логический оператор отрицания<em>"НЕ"</em>. Вернет true, если<strong>выражение ложно</strong>.</li>
38 <li>not - логический оператор отрицания<em>"НЕ"</em>. Вернет true, если<strong>выражение ложно</strong>.</li>
39 </ul><h2>Оператор else</h2>
39 </ul><h2>Оператор else</h2>
40 <p>В самом начале урока говорилось, что мы изучаем условную конструкцию if/else. С @if мы разобрались, теперь остался один вопрос: а что такое @else? На самом деле все проще, чем может показаться на первый взгляд. Блок кода внутри @else выполнится, если выражение в @if ложно. Все что нам нужно - добавить конструкцию @else после блока с @if. На примере с цветовыми схемами мы можем переписать код следующим образом:</p>
40 <p>В самом начале урока говорилось, что мы изучаем условную конструкцию if/else. С @if мы разобрались, теперь остался один вопрос: а что такое @else? На самом деле все проще, чем может показаться на первый взгляд. Блок кода внутри @else выполнится, если выражение в @if ложно. Все что нам нужно - добавить конструкцию @else после блока с @if. На примере с цветовыми схемами мы можем переписать код следующим образом:</p>
41 <p>Вот и вся хитрость. Так мы можем выбирать тот блок кода, который будет выполнен в зависимости от условия внутри оператора @if. При этом обратите внимание, что зачастую можно обойтись без оператора @else. Во всех примерах, кроме последнего мы перезаписывали значение переменной, если была выбрана темная тема. Это правильный подход, так как таким образом мы уверены в том, что по умолчанию будут установлены какие-то цвета и мы банально пишем меньше кода.</p>
41 <p>Вот и вся хитрость. Так мы можем выбирать тот блок кода, который будет выполнен в зависимости от условия внутри оператора @if. При этом обратите внимание, что зачастую можно обойтись без оператора @else. Во всех примерах, кроме последнего мы перезаписывали значение переменной, если была выбрана темная тема. Это правильный подход, так как таким образом мы уверены в том, что по умолчанию будут установлены какие-то цвета и мы банально пишем меньше кода.</p>