Sobes.tech
Junior

Dart dilində switch operatoru ilə şaxələnməni necə həyata keçirmək olar?

sobes.tech Süni İntellekt

AI-dan cavab

Dart-da switch operatoru ilə çoxşaxəlilik aşağıdakı kimi həyata keçirilir:

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

  switch (color) {
    case 'red':
      print('Seçilən rəng qırmızıdir.');
      break; // switch blokundan çıxır
    case 'blue':
      print('Seçilən rəng mavi.');
      break;
    case 'green':
      print('Seçilən rəng yaşıl.');
      break;
    default: // Heç bir case uyğun gəlməzsə işləyir
      print('Naməlum rəng.');
  }
}

switch dəyişənin (bu halda color) dəyərini case-dən sonra göstərilən sabitlərlə müqayisə edir. Uyğun gələndə, ona bağlı kod icra olunur. break açar sözü switch blokundan çıxmaq üçün lazımdır. Əks halda, icra növbəti case-ə keçir (bu "fallthrough" adlanır), bu isə ümumiyyətlə arzu olunmazdır. default istifadə olunur, heç bir case uyğun gəlmədikdə.

Dart-da, switch-da yalnız aşağıdakı ifadə tipləri istifadə edilə bilər:

  • int
  • String (String)
  • Kompilyasiya vaxtı sabitlər (const) və ya son (final) primitivi tiplər
  • Enum (enum)

Həmçinin, case (Type value) ilə tip uyğunluğu istifadə edilə bilər:

void process(dynamic value) {
  switch (value) {
    case String s:
      print('Dəyər stringdir: $s');
      break;
    case int i when i > 0: // `when` ilə guard istifadə
      print('Müsbət tam ədəd: $i');
      break;
    case List _: // List tipinə uyğunluq, dəyişənə bağlanmadan
      print('Dəyər listdir');
      break;
    default:
      print('Başqa tipdə dəyər');
  }
}

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

Dart 3.0-da, pattern matching yeni imkanlar ilə genişləndirildi:

var number = 1;
var text = switch (number) {
  1 => 'bir',
  2 => 'iki',
  _ => 'başqa' // default ilə eynidir
};
print(text); // Nəticə: bir

Burada, switch ifadə kimi istifadə olunur və dəyər qaytarır. _ operatoru hər hansı bir dəyərə uyğun gələn jokerdir.