Условные выражения Dart

Условные операторы, о которых пойдёт речь здесь — это не условные конструкции if-else. Речь идёт о тернарном операторе и операторе объединения null.

Два вида условных операторов

В Dart есть два компактных условных оператора, заменяющих громоздкие блоки if-else. За одну строку можно выполнить проверку условия, присвоить или вернуть значение.

  1. Тернарный условный оператор: condition ? expr1 : expr2
  2. Оператор объединения 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)

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *