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

  • Estilo explicito:
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