Конструкция if-case
Конструкция if-case в Dart позволяет совместить
обычную проверку условия с сопоставлением с образцом
(pattern matching). В первом параметре указывается
значение или выражение, которое нужно проверить,
а во втором - образец, с которым выполняется
сопоставление. Если образец совпадает со значением,
выполняется тело ветки. При этом переменные,
объявленные внутри образца, становятся доступны
внутри блока кода.
Конструкция if-case особенно удобна, когда
нужно проверить структуру данных, тип значения
или извлечь отдельные элементы из коллекции
без написания громоздких условий.
Синтаксис
if (value case pattern) {
// code
}
Пример
Давайте проверим, является ли значение типом int,
и выведем его на экран:
void main()
{
var value = 42;
if (value case int number) {
print('It is an integer: $number');
}
}
Результат выполнения кода:
"It is an integer: 42"
Пример
Давайте проверим, что список содержит ровно три элемента, и извлечём их:
void main()
{
var list = [1, 2, 3];
if (list case [int a, int b, int c]) {
print('Sum: ${a + b + c}');
}
}
Результат выполнения кода:
"Sum: 6"
Пример
Давайте используем if-case вместе с else,
чтобы обработать случай, когда образец не совпал:
void main()
{
var value = 'abcde';
if (value case int number) {
print('Number: $number');
} else {
print('Not a number');
}
}
Результат выполнения кода:
"Not a number"
Пример
Давайте извлечём поля из записи (record) с помощью образца:
void main()
{
var point = (1, 2);
if (point case (int x, int y)) {
print('x: $x, y: $y');
}
}
Результат выполнения кода:
"x: 1, y: 2"