Sobes.tech
Junior

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

sobes.tech AI

Отговор от AI

Разклоняване с помощта на оператора switch в Dart се извършва по следния начин:

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

  switch (color) {
    case 'red':
      print('Избраният цвят е червен.');
      break; // Изход от блока switch
    case 'blue':
      print('Избраният цвят е син.');
      break;
    case 'green':
      print('Избраният цвят е зелен.');
      break;
    default: // Изпълнява се, ако никой case не съвпадне
      print('Непознат цвят.');
  }
}

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

Важно е да се помни, че в Dart в switch могат да се използват само следните типове изрази:

  • int
  • Стрийтове (String)
  • Константи по време на компилация (const) или финални (final) променливи от примитивни типове
  • Енумерации (enum)

Също така може да се използва съвпадение по тип чрез case (Type value):

void process(dynamic value) {
  switch (value) {
    case String s:
      print('Стойността е стринг: $s');
      break;
    case int i when i > 0: // Използване на guard с when
      print('Положително цяло число: $i');
      break;
    case List _: // Съвпадение с тип List без връзка с променлива
      print('Стойността е списък');
      break;
    default:
      print('Стойността е от друг тип');
  }
}

void main() {
  process('здравей');
  process(10);
  process([1, 2, 3]);
  process(3.14);
}

В Dart 3.0 бяха въведени нови възможности за pattern matching, които разширяват switch изразите:

var number = 1;
var text = switch (number) {
  1 => 'едно',
  2 => 'две',
  _ => 'друго' // еквивалентно на default
};
print(text); // Ще изведе: едно

Тук switch се използва като израз, който връща стойност. Операторът _ служи като заместител, който съответства на всяка стойност.