Clases, herencia e imports
Objetivo de aprendizaje
- Estructurar programas Lucia con clases e imports multiarchivo.
Sintaxis clave
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); }
}
Ejemplos
- Import:
import "./models/pet.lucia";.
- Tambien puedes importar archivos del proyecto como
import "Palo.lucia";.
- Herencia simple con
extends.
- Los campos de clase pueden tener inicializadores por defecto.
- Los campos de clase pueden declararse con
const cuando no deben reasignarse.
- Uso de
this para estado de instancia.
Acceso a metodos y campos dentro de la clase
func toString(): string {
return this.obtenerNombreValor() + " " + this.obtenerNombrePalo();
}
- Estilo implicito (permitido):
func toString(): string {
return obtenerNombreValor() + " " + obtenerNombrePalo();
}
Asignacion por indice en 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;
}
}
Errores comunes
- Olvidar que un campo
const de clase requiere inicializador.
- Reasignar un campo
const despues de declararlo.
- Clase/funcion desconocida por import faltante.
- Imports ciclicos entre archivos.
- Usar
list.length() en lugar de len(list).
Practica sugerida
- Divide un modelo de dominio en 2-3 archivos con imports, herencia y campos inicializados.
Practica extendida
- Crea
Carta y Tablero en archivos separados.
- Implementa creacion y mezcla del mazo con asignacion por indice.
- Imprime etiquetas de carta con interpolacion y metodos auxiliares.
Relacionados
- declarations-let-const
- diagnostics