Sobes.tech
Junior

Jaký je rozdíl mezi klíčovými slovy Abstract a late v Dart?

sobes.tech AI

Odpověď od AI

Abstract se používá k vytváření abstraktních tříd, které nelze přímo instancovat. Abstraktní třída může obsahovat jak implementované, tak abstraktní (bez implementace) metody. Abstraktní metody musí být implementovány v neabstraktních podtřídách.

late se používá pro odloženou inicializaci proměnných. Proměnná označená jako late bude zaručeně inicializována před svým prvním použitím. Pokud proměnná deklarovaná jako late není inicializována před prvním přístupem, dojde k chybě za běhu. To je užitečné pro inicializaci proměnných, jejichž hodnoty závisí na jiných proměnných nebo logice, která se provádí po deklaraci.

Vlastnost Abstract late
Použití na Třídách Proměnných
Cíl Definuje kontrakt, šablonu Odložená inicializace
Instancování Není možné přímo Je možné
Povinnost Implementace v podtřídách (pro abstraktní metody) Inicializace před prvním použitím

Příklad abstract:

// Definice abstraktní třídy
abstract class Shape {
  // Abstraktní metoda
  double getArea();

  // Implementovaná metoda
  void printName() {
    print("Toto je tvar");
  }
}

// Implementace abstraktní třídy
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Nelze vytvořit instanci Shape:
// var shape = Shape(); // Chyba

Příklad late:

// Deklarace proměnné s odloženou inicializací
late String name;

void setupName() {
  // Inicializace proměnné před prvním použitím
  name = "Flutter Developer";
}

void greet() {
  // První použití proměnné name po inicializaci
  print("Hello, $name!");
}

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

  // Pokud by bylo voláno greet() před setupName(), došlo by k chybě za běhu
  // greet(); // Chyba, pokud name nebylo inicializováno
}