Classes, heranca e modulos
Objetivo de aprendizagem
- Estruturar programas Lucia com classes e imports em varios arquivos.
Sintaxe chave
class Animal {
let name: string = "unknown";
const kind: string = "animal";
constructor(name: string) { this.name = name; }
}
class Dog extends Animal {
func bark() { print(this.name); }
}
Exemplos
- Sintaxe de import:
import "./models/pet.lucia";.
- Import tambem suporta arquivos locais do projeto como
import "Palo.lucia";.
- Heranca simples com
extends.
- Campos de classe podem usar inicializadores padrao.
- Campos de classe podem ser declarados com
const quando nao devem ser reatribuidos.
- Use
this para estado da instancia.
Acesso a metodos e campos dentro de classes
func toString(): string {
return this.obtenerNombreValor() + " " + this.obtenerNombrePalo();
}
- Estilo implicito (permitido):
func toString(): string {
return obtenerNombreValor() + " " + obtenerNombrePalo();
}
Atribuicao indexada em metodos
func mezclarMazo(): void {
let n: int = len(this.mazo);
for (let i = 0; i < n; i = i + 1) {
let j: int = random(0, n - 1);
let temp: Carta = this.mazo[i];
this.mazo[i] = this.mazo[j];
this.mazo[j] = temp;
}
}
Erros comuns
- Esquecer que campos
const de classe exigem inicializador.
- Reatribuir campo
const apos declaracao.
- Classe/funcao desconhecida por import ausente.
- Imports circulares entre arquivos.
- Usar
list.length() em vez de len(list).
Pratica sugerida
- Divida um pequeno modelo de dominio em 2-3 arquivos usando imports, heranca e campos inicializados.
Relacionados
- declarations-let-const
- diagnostics