Sobes.tech
Junior

Kāda ir atšķirība starp atslēgvārdiem Abstract un late Dart?

sobes.tech AI

Atbilde no AI

Abstract tiek izmanto, lai izveidotu abstraktas klases, kuras nav iespējams tieši instancēt. Abstrakta klase var saturēt gan realizētus, gan abstraktus (bez realizācijas) metodes. Abstraktās metodes jārealizē apakšklasēs.

late tiek izmantots atliktai inicializācijai. late atzīmēts mainīgais tiks garantēti inicializēts pirms tā pirmās lietošanas. Ja mainīgais ir atzīmēts kā late un tas nav inicializēts pirms pirmās piekļuves, notiks izpildes kļūda. Tas ir noderīgi mainīgajiem, kuru vērtības ir atkarīgas no citiem mainīgajiem vai loģikas, kas tiek izpildīta pēc deklarēšanas.

Īpašība Abstract late
Pielietojums Klases Mainīgajiem
Mērķis Definēt līgumu, šablonu Atlikta inicializācija
Instancēšana Nav iespējama tieši Ir iespējama
Obligātība Metožu realizācija apakšklasēs Inicializācija pirms pirmās lietošanas

Piemērs abstract:

// Abstraktās klases definīcija
abstract class Shape {
  // Abstrakta metode
  double getArea();

  // Realizēta metode
  void printName() {
    print("Šis ir figūra");
  }
}

// Abstraktās klases realizācija
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Nav iespējams izveidot Shape instanci:
// var shape = Shape(); // Kļūda

Piemērs late:

// Deklarācija ar atliktu inicializāciju
late String name;

void setupName() {
  // Inicializācija pirms pirmās lietošanas
  name = "Flutter Developer";
}

void greet() {
  // Pirmā lietošana pēc inicializācijas
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // Izvadīs "Hello, Flutter Developer!"

  // Ja greet() tiktu izsaukts pirms setupName(), būtu kļūda
  // greet(); // Kļūda, ja name nav inicializēts
}