Назад к вопросам
Junior
115
questionbank

Как реализовать ветвление с помощью оператора switch в языке Dart?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

Ветвление с помощью оператора switch в Dart выполняется следующим образом:

void main() {
  var color = 'red';

  switch (color) {
    case 'red':
      print('Selected color is red.');
      break; // Завершает выполнение switch-блока
    case 'blue':
      print('Selected color is blue.');
      break;
    case 'green':
      print('Selected color is green.');
      break;
    default: // Выполняется, если ни один case не совпал
      print('Unknown color.');
  }
}

switch сравнивает значение переменной (в данном случае color) с константами, указанными после case. При совпадении выполняется код, связанный с этим case. Ключевое слово break необходимо для выхода из switch-блока после выполнения соответствующего case. Если его опустить, исполнение перейдет к следующему case (это называется "fallthrough"), что обычно нежелательно. default используется для обработки случаев, когда ни один из case не совпадает.

Важно помнить, что в Dart в switch можно использовать только следующие типы выражений в case:

  • int
  • Строки (String)
  • Константы времени компиляции (const) или финальные (final) переменные примитивных типов
  • Перечисления (enum)

Также можно использовать совпадение по типу с помощью case (Type value):

void process(dynamic value) {
  switch (value) {
    case String s:
      print('Value is a string: $s');
      break;
    case int i when i > 0: // Использование guard clause с when
      print('Value is a positive integer: $i');
      break;
    case List _: // Сопоставление с типом List без привязки к переменной
      print('Value is a list');
      break;
    default:
      print('Value is of another type');
  }
}

void main() {
  process('hello');
  process(10);
  process([1, 2, 3]);
  process(3.14);
}

В Dart 3.0 появились новые возможности паттерн-матчинга, которые расширяют switch выражения:

var number = 1;
var text = switch (number) {
  1 => 'one',
  2 => 'two',
  _ => 'other' // Эквивалентно default
};
print(text); // Выведет: one

Здесь switch используется как выражение, возвращающее значение. Оператор _ выступает как подстановочный символ, соответствующий любому значению.