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
}