Menu
Coddy logo textTech

Listas de Inicialização

Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy — lição 12 de 110.

Uma lista de inicialização é o código que aparece após dois pontos em um construtor, antes do corpo do construtor. Ela é executada antes da execução do corpo do construtor e é usada para inicializar variáveis de instância.

Você já viu listas de inicialização em lições anteriores:

Point.origin() : x = 0, y = 0;

A parte após os dois pontos (x = 0, y = 0) é a lista de inicializadores. Múltiplas inicializações são separadas por vírgulas.

Listas de inicialização são essenciais ao trabalhar com variáveis final, que devem ser definidas antes que o corpo do construtor seja executado:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Circle c = Circle(5);
print(c.radius); // 5.0
print(c.area);   // 78.53975

A lista de inicialização também pode realizar cálculos ou transformações nos parâmetros do construtor antes de atribuí-los. Isso é útil quando você precisa derivar valores ou validar dados durante a criação do objeto.

Você pode combinar a sintaxe abreviada this. com uma lista de inicialização:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

Rectangle rect = Rectangle(4, 5);
print(rect.area); // 20.0

Aqui, width e height são atribuídos via forma abreviada, enquanto area é calculada na lista de inicialização usando esses valores.

challenge icon

Desafio

Fácil

Vamos construir uma calculadora de dimensões de caixa que utiliza listas de inicialização para computar valores derivados quando os objetos são criados.

Você organizará seu código em dois arquivos:

  • box.dart: Defina uma classe Box que representa uma caixa 3D com dimensões e propriedades calculadas automaticamente. Sua classe deve ter:
    • Três campos final double: length, width e height
    • Dois campos final double computados: volume e surfaceArea
    • Um construtor que recebe length, width e height usando o atalho this., e utiliza uma lista de inicialização para calcular volume (length × width × height) e surfaceArea (2 × (length×width + width×height + height×length))
    • Um método display() que imprime as informações da caixa
  • main.dart: Importe sua classe box e crie duas caixas:
    • Uma caixa com dimensões 3.0, 4.0, 5.0
    • Uma caixa com dimensões 2.0, 2.0, 2.0
    Chame display() em cada caixa na ordem listada.

O método display() deve imprimir exatamente neste formato:

Box: [length]x[width]x[height] | Volume: [volume] | Surface: [surfaceArea]

Saída esperada:

Box: 3.0x4.0x5.0 | Volume: 60.0 | Surface: 94.0
Box: 2.0x2.0x2.0 | Volume: 8.0 | Surface: 24.0

Folha de consulta

Uma lista de inicialização (initializer list) é um código que aparece após os dois pontos em um construtor, antes do corpo do construtor. Ela é executada antes do corpo do construtor e é usada para inicializar variáveis de instância.

Sintaxe básica com múltiplas inicializações separadas por vírgulas:

Point.origin() : x = 0, y = 0;

Listas de inicialização são essenciais para variáveis final, que devem ser definidas antes que o corpo do construtor seja executado:

class Circle {
  final double radius;
  final double area;

  Circle(double r)
      : radius = r,
        area = 3.14159 * r * r;
}

Você pode combinar a sintaxe abreviada this. com uma lista de inicialização para atribuir alguns campos diretamente e calcular outros:

class Rectangle {
  final double width;
  final double height;
  final double area;

  Rectangle(this.width, this.height)
      : area = width * height;
}

A lista de inicialização pode realizar cálculos ou transformações nos parâmetros do construtor antes de atribuí-los, o que é útil para derivar valores durante a criação do objeto.

Experimente você mesmo

import 'box.dart';

void main() {
  // TODO: Crie uma caixa com as dimensões 3.0, 4.0, 5.0
  
  // TODO: Crie uma caixa com as dimensões 2.0, 2.0, 2.0
  
  // TODO: Chame display() em cada caixa em ordem
  
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos