Sobes.tech
Junior

Wat is het verschil tussen de sleutelwoorden Abstract en late in Dart?

sobes.tech AI

Antwoord van AI

Abstract wordt gebruikt om abstracte klassen te maken, die niet direct kunnen worden geïnstantieerd. Een abstracte klasse kan zowel geïmplementeerde als abstracte (zonder implementatie) methoden bevatten. Abstracte methoden moeten worden geïmplementeerd in niet-abstracte subclasses.

late wordt gebruikt voor deferred initialisatie van variabelen. Een variabele gemarkeerd als late zal gegarandeerd worden geïnitialiseerd vóór het eerste gebruik. Als een late-variabele niet wordt geïnitialiseerd vóór de eerste toegang, zal er een runtime-fout optreden. Dit is handig voor het initialiseren van variabelen waarvan de waarde afhankelijk is van andere variabelen of logica die na de declaratie wordt uitgevoerd.

Eigenschap Abstract late
Toepassing op Klassen Variabelen
Doel Definieert een contract, sjabloon Uitgestelde initialisatie
Instantiering Niet direct mogelijk Mogelijk
Verplichting Implementaties in subclasses (voor abstracte methoden) Initialisatie vóór eerste gebruik

Voorbeeld van abstract:

// Definitie van een abstracte klasse
abstract class Shape {
  // Abstracte methode
  double getArea();

  // Geïmplementeerde methode
  void printName() {
    print("Dit is een figuur");
  }
}

// Implementatie van de abstracte klasse
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Je kunt geen instantie van Shape maken:
// var shape = Shape(); // Fout

Voorbeeld van late:

// Declaratie van een variabele met uitgestelde initialisatie
late String name;

void setupName() {
  // Initialisatie van de variabele vóór het eerste gebruik
  name = "Flutter Developer";
}

void greet() {
  // Eerste gebruik van de variabele na initialisatie
  print("Hello, $name!");
}

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

  // Als greet() werd aangeroepen vóór setupName(), zou er een runtime-fout optreden
  // greet(); // Fout als name niet geïnitialiseerd is
}