Añadir métodos a las formas
Parte de la sección Introducción a Luau del Journey de Lua de Coddy — lección 42 de 73.
De tu capítulo de POO en Lua sabes que las tablas pueden contener funciones como cualquier otro valor. Las formas también pueden describir esos campos de función, convirtiendo una forma en un pequeño contrato de datos y comportamiento.
Un campo de método utiliza la sintaxis de tipo función que aprendiste en el capítulo de funciones. Su primer parámetro se llama convencionalmente self —la tabla a la que pertenece el método— y la forma puede incluso referenciarse a sí misma:
type Greeter = {
name: string,
greet: (self: Greeter) -> string,
}Para implementar la forma, almacena una función en el campo y dale ese parámetro self:
local greeter: Greeter = {
name = "Ana",
greet = function(self: Greeter): string
return `Hello, I'm {self.name}`
end,
}Llamarlo significa pasar la tabla como self tú mismo: greeter.greet(greeter). A través de self el método lee los campos de cualquier tabla sobre la que haya sido llamado.
Escribir la tabla dos veces resulta incómodo, y ya conoces la solución de Lua: los dos puntos. La siguiente lección conecta la sintaxis : con estas formas con tipo.
Desafío
FácilCrea un alias de tipo llamado Rectangle con:
widthde tiponumberheightde tiponumberarea— un método(self: Rectangle) -> numberque devuelvawidth * heightperimeter— un método(self: Rectangle) -> numberque devuelva2 * (width + height)
Crea una variable rect de tipo Rectangle con ancho 4, alto 6 y ambos métodos implementados (recuerda el parámetro self).
Imprime, cada uno en su propia línea (llama a los métodos con la sintaxis de punto, pasando rect como self):
- el área del rectángulo
- el perímetro del rectángulo
- el ancho del rectángulo
Pruébalo tú mismo
-- Escribe código aquí
-- 1) define el tipo Rectangle con dos campos number y dos métodos
-- 2) crea rect (width 4, height 6) implementando ambos métodos
-- 3) imprime area, perimeter y width
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Introducción a Luau
1Primeros pasos con Luau
¿Qué es Luau?¿Por qué usar Luau?Tu primer código en LuauComprobación de tipos y modos de errorRecapitulacion: Introducción a Luau4Trabajando con Funciones
Tipado de Parámetros y Valores de RetornoTipado de Funciones AnónimasFunciones que no Retornan NadaParámetros OpcionalesValores por Defecto en ParámetrosFunciones VariádicasDefinición de Tipos de FuncionesRecapitulaciones: Funciones Tipadas2Tipos principales
Tipos básicos: num, str, boolEl tipo 'any': Vía de escapeEl tipo 'unknown'Tipos nulos y opcionalesInferencia de tipos en acciónAnotaciones explícitas de tiposResumen: Práctica de tipos principales5Alias, Uniones e Intersecciones
Alias de tipos para primitivosTipos de uniónTrabajando con tipos de uniónTipos literalesTipos de intersecciónCombinando alias de tiposResumen: Combinaciones avanzadas de tipos3Tablas tipadas: Arrays y Maps
Arrays tipadosAñadir y leer elementos¿Qué es un tipo Map?Declarar y acceder a MapsIterar tablasTablas de forma mixtaArrays tipados multidimensionalestable.unpack y VarargsRecapitulaciones: Arrays y Maps6Definición de formas de tablas
Anotaciones de forma en líneaAlias de tipos para formasPropiedades opcionalesFormas frente a tablas no estructuradasExtensión de formasAñadir métodos a las formasEl parámetro 'self' y los métodos con dos puntosRecapitulación: Definición de formas de tablas