Sobes.tech
Junior

Dart-də Abstract və late açar sözləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Abstract sinfi yaradmaq üçün istifadə olunur və birbaşa nümunə götürülə bilməz. Abstract sinf, həm tətbiq olunmuş, həm də tətbiq olunmamış (implementasiya edilməmiş) metodlar içərə bilər. Tətbiq olunmamış metodlar, qeyri-abstract alt siniflərdə tətbiq olunmalıdır.

late dəyişənlərin gecikdirilmiş başlanğıcı üçün istifadə olunur. late ilə işarələnmiş dəyişən, ilk istifadə edilmədən əvvəl mütləq şəkildə başlanğıc alacaq. Əgər late kimi elan edilmiş dəyişən, ilk girişindən əvvəl başlanmazsa, icra zamanı xəta baş verəcək. Bu, digər dəyişənlərə və ya elan edildikdən sonra icra olunan məntiqə bağlı olan dəyişənlərin başlanğıcı üçün faydalıdır.

Xüsusiyyət Abstract late
Tətbiq sahəsi Sinflər Dəyişənlər
Məqsəd Müqavilə, şablon təyin edir Gecikdirilmiş başlanğıc
İstifadə edilə bilər Birbaşa mümkün deyil Mümkündür
Zərurət Alt siniflərdə metodların tətbiqi (abstract metodlar üçün) Birinci istifadədən əvvəl başlanğıc

abstract nümunəsi:

// Abstract sinifin təyini
abstract class Shape {
  // Abstract metod
  double getArea();

  // Tətbiq olunmuş metod
  void printName() {
    print("Bu bir fiqurdur");
  }
}

// Abstract sinfin tətbiqi
class Circle extends Shape {
  double radius;

  Circle(this.radius);

  @override
  double getArea() {
    return 3.14 * radius * radius;
  }
}

// Shape nümunəsi yaradıla bilməz:
// var shape = Shape(); // Xəta

late nümunəsi:

// Gecikdirilmiş başlanğıc ilə dəyişən elan
late String name;

void setupName() {
  // Dəyişənin ilk istifadə edilməsindən əvvəl başlanğıcı
  name = "Flutter Developer";
}

void greet() {
  // Dəyişənin ilk istifadəsi sonrası
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // "Hello, Flutter Developer!" göstərəcək

  // Əgər greet() setupName()dan əvvəl çağırılsaydı, icra zamanı xəta baş verərdi
  // greet(); // Xəta, əgər name başlanmayıbsa
}