Условные операторы, о которых пойдёт речь здесь — это не условные конструкции if-else. Речь идёт о тернарном операторе и операторе объединения null.
Два вида условных операторов
В Dart есть два компактных условных оператора, заменяющих громоздкие блоки if-else. За одну строку можно выполнить проверку условия, присвоить или вернуть значение.
- Тернарный условный оператор:
condition ? expr1 : expr2 - Оператор объединения null:
expr1 ?? expr2
Тернарный оператор condition ? expr1 : expr2
Синтаксис
Булево условие ? Выражение при истине : Выражение при лжи
Если результат вычисления condition равен true, возвращается expr1; если false — возвращается expr2.
Переменная condition возвращает булево значение, по этому булеву результату выбирается одно из двух значений для присваивания или возврата.
Пример:
void main() {
bool isRain = true;
// Присвоение через тернарное выражение
var result = isRain ? 'Идёт дождь' : 'Дождя нет';
print(result); // Идёт дождь
isRain = false;
result = isRain ? 'Идёт дождь' : 'Дождя нет';
print(result); // Дождя нет
}Code language: Dart (dart)
Результат выполнения
D:\dartdemo\firstdart>dart run
Building package executable...
Built firstdart:firstdart.
Идёт дождь
Дождя нетCode language: CSS (css)
Если вы уже освоили конструкцию if-else, код можно записать так:
void main() {
bool isRain = true;
String result;
if (isRain) {
result = 'Идёт дождь';
} else {
result = 'Дождя нет';
}
print(result);//Идёт дождь
}Code language: Dart (dart)
Оператор объединения null
Проверяет, равно ли переменная null, и позволяет быстро задать значение по умолчанию.
Синтаксис expr1 ?? expr2
Выражение с поддержкой null ?? Значение по умолчаниюCode language: JavaScript (javascript)
- Если
expr1не равен null, оператор сразу возвращаетexpr1; - Если
expr1равенnull, возвращаетсяexpr2
Официальный пример
void main() {
// Параметр — строка с поддержкой null String?
String playerName(String? name) => name ?? 'Guest';
print(playerName("Tom")); // Tom
print(playerName(null)); // Guest
}Code language: JavaScript (javascript)
Мы создаём функцию playerName для получения имени игрока, её параметр — строка, допускающая null. Оператор ?? задаёт стандартное значение: если переданный name равен null, возвращается Guest по умолчанию.
Дополнение
Здесь playerName — это стрелочная функция, сокращённая запись обычной функции. Мы разберём её позже, она полностью эквивалентна следующему коду:
String playerName(String? name) {
return name ?? 'Guest';
}Code language: Dart (dart)
Сравнение эквивалентных записей
Реализация через тернарный оператор
String playerName(String? name) => name != null ? name : 'Guest';Code language: JavaScript (javascript)
Полная конструкция if-else
String playerName(String? name) {
if (name != null) {
return name;
} else {
return 'Guest';
}
}Code language: JavaScript (javascript)