Sobes.tech
Junior

Dartта Abstract жана late ачкыч сөздөрүнүн айырмасы эмнеде?

sobes.tech AI

AIден жооп

Abstract колдонулат абстракттуу класстарды түзүү үчүн, алар түздөн-түз инстанцталбайт. Абстракттуу классда ишке ашырылган жана абстракттуу (ишке ашырылбаган) методдор болушу мүмкүн. Абстракттуу методдорду подклассларда ишке ашыруу керек:

late өзгөрмөдө кечиктирилген инициализация колдонулат. late деп белгиленген өзгөрмө биринчи колдонулгандан мурун ишке киргизилет. Эгер late деп белгиленген жана биринчи колдонууга чейин инициализацияланбаса, иштөө учурунда ката болот. Бул өзгөрмөлөрдүн башка өзгөрмөлөргө же логикага көз каранды болгон учурда пайдалуу:

Өзгөрмө Abstract late
Колдонуу Класстар Өзгөрмөлөр
Максат Контракт, шаблон Кечиктирилген инициализация
Инстанцалуу Түздөн-түз мүмкүн эмес Мүмкүн
Мажбурлоо Методдорду ишке ашыруу подклассларда Инициализация биринчи колдонууда

Мисал abstract:

// Абстракттуу классты аныктоо
abstract class Shape {
  // Абстракттуу метод
  double getArea();

  // Ишке ашырылган метод
  void printName() {
    print("Бул фигура");
  }
}

// Абстракттуу классты ишке ашыруу
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Shape түзө албайсыз:
// var shape = Shape(); // Ката

Мисал late:

// Кечиктирилген инициализация менен өзгөрмө аныктоо
late String name;

void setupName() {
  // Өзгөрмөнүн инициализациясы биринчи колдонулгандан мурун
  name = "Flutter Developer";
}

void greet() {
  // Биринчи колдонуу
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // Чыгаруу "Hello, Flutter Developer!"

  // Эгер greet() алдын ала чакырылса, ката болот
  // greet(); // Ката, эгер name инициализацияланбаса
}