Sobes.tech
Junior

Aký je rozdiel medzi kľúčovými slovami Abstract a late v Dart?

sobes.tech AI

Odpoveď od AI

Abstract sa používa na vytváranie abstraktných tried, ktoré nie je možné priamo inštancovať. Abstraktná trieda môže obsahovať implementované aj abstraktné (bez implementácie) metódy. Abstraktné metódy musia byť implementované v neabstraktných podtriedach.

late sa používa na oneskorenú inicializáciu premenných. Premenná označená ako late bude zaručene inicializovaná pred svojím prvým použitím. Ak je premenná deklarovaná ako late a nie je inicializovaná pred prvým prístupom k nej, dôjde k chybe za behu. Je to užitočné na inicializáciu premenných, ktorých hodnoty závisia od iných premenných alebo logiky vykonávanej po deklarácii.

Vlastnosť Abstract late
Použitie na Triedach Premenných
Cieľ Definuje kontrakt, šablón Oneskoorená inicializácia
Inštancovanie Nie je možné priamo Je možné
Povinnosť Implementácie metód v podtriedach (pre abstraktné metódy) Inicializácia pred prvým použitím

Príklad abstract:

// Definícia abstraktnej triedy
abstract class Shape {
  // Abstraktná metóda
  double getArea();

  // Implementovaná metóda
  void printName() {
    print("Toto je tvar");
  }
}

// Implementácia abstraktnej triedy
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Nie je možné vytvoriť inštanciu Shape:
// var shape = Shape(); // Chyba

Príklad late:

// Deklarácia premennej s oneskorenou inicializáciou
late String name;

void setupName() {
  // Inicializácia premennej pred prvým použitím
  name = "Flutter Developer";
}

void greet() {
  // Prvé použitie premennej name po inicializácii
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // Vypíše "Hello, Flutter Developer!"

  // Ak by bol greet() volaný pred setupName(), nastala by chyba za behu
  // greet(); // Chyba, ak by name nebola inicializovaná
}