Sobes.tech
Junior

Qual é a diferença entre as palavras-chave Abstract e late em Dart?

sobes.tech IA

Resposta da IA

Abstract é usado para criar classes abstratas, que não podem ser instanciadas diretamente. Uma classe abstrata pode conter métodos implementados e métodos abstratos (sem implementação). Os métodos abstratos devem ser implementados nas subclasses não abstratas.

late é usado para inicialização diferida de variáveis. Uma variável marcada como late será garantidamente inicializada antes do seu primeiro uso. Se uma variável declarada como late não for inicializada antes do seu primeiro acesso, ocorrerá um erro em tempo de execução. Isto é útil para inicializar variáveis cujo valor depende de outras variáveis ou lógica que é executada após a declaração.

Propriedade Abstract late
Aplicação a Classes Variáveis
Objetivo Define um contrato, modelo Inicialização diferida
Instanciação Não é possível diretamente É possível
Obrigatoriedade Implementações em subclasses (para métodos abstratos) Inicialização antes do primeiro uso

Exemplo de abstract:

// Definição de classe abstrata
abstract class Shape {
  // Método abstrato
  double getArea();

  // Método implementado
  void printName() {
    print("Isto é uma figura");
  }
}

// Implementação de classe abstrata
class Circle extends Shape {
  double radius;

  Circle(this.radius);

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

// Não é possível criar uma instância de Shape:
// var shape = Shape(); // Erro

Exemplo de late:

// Declaração de variável com inicialização diferida
late String name;

void setupName() {
  // Inicialização da variável antes do primeiro uso
  name = "Flutter Developer";
}

void greet() {
  // Primeiro uso da variável name após a inicialização
  print("Hello, $name!");
}

void main() {
  setupName();
  greet(); // Mostrará "Hello, Flutter Developer!"

  // Se `greet()` fosse chamado antes de `setupName()`, ocorreria um erro em tempo de execução
  // greet(); // Erro se `name` não foi inicializado
}