Sobes.tech
Junior

Dart tilida Abstract va late so'z kalitlari orasidagi farq nima?

sobes.tech AI

AIdan javob

Abstract sinfi yaratish uchun ishlatiladi va to'g'ridan-to'g'ri instansiya qilish mumkin emas. Abstract sinf amalga oshirilgan va amalga oshirilmagan (implementatsiya qilinmagan) metodlarni o'z ichiga olishi mumkin. Abstract metodlar non-abstract subclasslarda amalga oshirilishi kerak.

late o'zgaruvchilarni kechiktirilgan boshlash uchun ishlatiladi. late bilan belgilangan o'zgaruvchi, uning birinchi foydalanishidan oldin, aniq ravishda boshlanishi kafolatlanadi. Agar late sifatida e'lon qilingan o'zgaruvchi, uning birinchi kirishidan oldin boshlanmasa, bajarilish vaqtida xato yuz beradi. Bu, boshqa o'zgaruvchilarga yoki e'lon qilinganidan keyin bajariladigan mantiqqa bog'liq bo'lgan o'zgaruvchilarni boshlash uchun foydalidir.

Xususiyat Abstract late
Qo'llanilishi Sinflar O'zgaruvchilar
Maqsad Shartnoma, shablon aniqlash Kechiktirilgan boshlash
Instansiya qilish To'g'ridan-to'g'ri mumkin emas Mumkin
Majburiyat Subklasslarda metodlarni amalga oshirish (abstract metodlar uchun) Birinchi foydalanishdan oldin boshlash

abstract misoli:

// Abstract sinf ta'rifi
abstract class Shape {
  // Abstract metod
  double getArea();

  // Amalga oshirilgan metod
  void printName() {
    print("Bu figura");
  }
}

// Abstract sinfni amalga oshirish
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Shape ni to'g'ridan-to'g'ri yaratib bo'lmaydi:
// var shape = Shape(); // Xato

late misoli:

// Kechiktirilgan boshlash bilan o'zgaruvchi e'lon qilish
late String name;

void setupName() {
  // O'zgaruvchini birinchi foydalanishdan oldin boshlash
  name = "Flutter Developer";
}

void greet() {
  // Birinchi foydalanish
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // "Hello, Flutter Developer!" chiqaradi

  // Agar greet() setupName()dan oldin chaqirilsa, bajarilish vaqtida xato yuz beradi
  // greet(); // Xato, agar name boshlanmagan bo'lsa
}