Noções básicas de construtores
Parte da seção Programação Orientada a Objetos do Journey de Dart da Coddy. Lição 8 de 110.
Um construtor é um método especial que é executado automaticamente quando você cria um novo objeto. Ele inicializa as variáveis de instância do objeto no momento da criação.
Aqui está um exemplo de uma classe com um construtor:
class Dog {
late String name; // late: definido no corpo do construtor
late String breed;
Dog(String name, String breed) {
this.name = name;
this.breed = breed;
}
}O construtor tem o mesmo nome que a classe. Os parâmetros são passados ao criar o objeto.
Crie objetos passando argumentos para o construtor:
Dog rex = Dog('Rex', 'German Shepherd');
Dog buddy = Dog('Buddy', 'Golden Retriever');Acesse as variáveis definidas pelo construtor:
print(rex.name);
print(rex.breed);
print(buddy.name);
print(buddy.breed);Saída:
Rex
German Shepherd
Buddy
Golden RetrieverDart também oferece uma sintaxe abreviada de construtor que usa this.variableName diretamente na lista de parâmetros:
class Dog {
String name;
String breed;
// Forma abreviada: atribui automaticamente os parâmetros às variáveis de instância
Dog(this.name, this.breed);
}As duas versões produzem o mesmo resultado. A forma abreviada é um recurso popular do Dart que elimina a necessidade de escrever this.name = name manualmente.
Você também pode adicionar valores padrão aos parâmetros:
class Cat {
String name;
int age;
Cat(this.name, [this.age = 1]); // age tem valor padrão 1
}
Cat fluffy = Cat('Fluffy', 3);
Cat whiskers = Cat('Whiskers'); // age tem valor padrão 1
print('${fluffy.name} is ${fluffy.age}'); // Fluffy tem 3
print('${whiskers.name} is ${whiskers.age}'); // Whiskers tem 1Ponto-chave: os construtores garantem que todo objeto seja inicializado corretamente com dados no momento em que é criado, evitando que você precise definir variáveis manualmente depois.
Desafio
FácilVocê recebeu arquivos Dart (book.dart e driver.dart) para implementar um sistema de livros.
Suas tarefas:
- Conclua a classe
Bookembook.dartadicionando um construtor que inicializetitle,authorepages: use a sintaxe abreviada do DartBook(this.title, this.author, this.pages); - Em
driver.dart, crie um objetoBookpara'Harry Potter', de'J.K. Rowling', com400páginas
Siga os comentários TODO em cada arquivo.
Experimente você mesmo
import 'book.dart';
void main() {
// TODO: Crie um objeto Book com:
// title: 'Harry Potter', author: 'J.K. Rowling', pages: 400
Book myBook = ?;
print("'${myBook.title}' by ${myBook.author}, ${myBook.pages} pages");
}
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
1Fundamentos de OOP
Arquivos externosBibliotecas e importsIntrodução à OOPClasses vs. objetosA palavra-chave thisMétodosVariáveis de instânciaNoções básicas de construtoresRevisão - Calculadora simples4Segurança contra nulos
Introdução à segurança contra nulosAnulável vs. não anulávelOs operadores ? e !Palavra-chave Late e segurança contra nulosOperadores conscientes de nulosSegurança contra nulos em classesRecapitulação — Sistema de perfil de usuário7Classes Abstratas e Interfaces
Classes AbstratasMétodos AbstratosInterfaces em DartInterfaces ImplícitasImplementação vs. ExtensãoMúltiplas InterfacesRecapitulação - Calculadora de Formas10Coleções e Genéricos
Visão geral de List, Set e MapColeções com segurança de tiposClasses genéricasMétodos genéricosRestrições genéricasIterable e IteratorRecapitulação - Armazenamento genérico13Conceitos Avançados de OOP
Composição vs. HerançaMétodos de ExtensãoClasses ChamáveisClasses Seladas (Dart 3)Registros (Dart 3)Padrões e Correspondência (3.0)Enums com Métodos16Projeto: Gerenciamento de Biblioteca
Visão Geral do ProjetoClasses de Livros e Usuários2Construtores em Dart
Construtor padrãoConstrutores nomeadosListas de inicializaçãoConstrutores constantesConstrutores factoryConstrutores de redirecionamentoRevisão - Construtor de formas5Encapsulamento
Membros Públicos vs. PrivadosConvenção do Prefixo _Privacidade no Nível da BibliotecaAprofundamento em Getters e SettersOcultação de InformaçõesRecapitulação - Registros de Alunos8Mixins
Introdução a MixinsCriando MixinsUsando vários MixinsPalavra-chave on em MixinsMixin vs HerançaMixin vs InterfaceRecapitulação - Sistema de Animais11Métodos Especiais
Sobrescrita de toString()Sobrescrita de hashCode e ==Interface ComparableMétodo call()Sobrescrita de noSuchMethodRecapitulação - Coleção Personalizada14Padrões de Projeto – Parte 1
Introdução aos Padrões de ProjetoPadrão SingletonPadrão FactoryPadrão ObserverPadrão Strategy3Propriedades de Classe
Membros de Instância vs. EstáticosCampos Final e ConstVariáveis LateMétodos e Campos EstáticosGetters e SettersRecapitulação - Gerenciador de Contas Bancárias6Herança
Herança BásicaA Palavra-chave superSobrescrita de MétodosA Anotação @overrideA Palavra-chave final para ClassesConstrutores e HerançaRecapitulação - Hierarquia de Funcionários9Polimorfismo
Fundamentos do polimorfismoPolimorfismo por meio de interfacesVerificação de tipos em tempo de execuçãoOs operadores is e asPalavra-chave covarianteRecapitulação — Processador de pagamentos12OOP Assíncrona
Futures e async/awaitNoções básicas de StreamsControladores de StreamConstrutores assíncronosAsync em métodos de classeRecapitulação — Buscador de dados15Padrões de Projeto — Parte 2
Padrão CommandPadrão AdapterPadrão DecoratorPadrão Template MethodPadrão StatePadrão CompositePadrão RepositoryPratique por conta própria: Compilador de Dart online