Menu
Coddy logo textTech

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.

Desde tu capítulo sobre POO en Lua sabes que las tablas pueden contener funciones, igual que cualquier otro valor. Las formas también pueden describir esos campos de función: convierten una forma en un pequeño contrato de datos y comportamiento.

Un campo de método utiliza la sintaxis de tipo de función que aprendiste en el capítulo sobre funciones. Su primer parámetro se denomina convencionalmente self, la tabla a la que pertenece el método, y la forma incluso puede hacer referencia 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 tú mismo la tabla como self: greeter.greet(greeter). Mediante self, el método lee los campos de la tabla sobre la que se llamó.

Escribir la tabla dos veces resulta engorroso, y ya conoces la solución de Lua: los dos puntos. La próxima lección conecta la sintaxis : con estas formas tipadas.

challenge icon

Desafío

Fácil

Crea un alias de tipo llamado Rectangle con:

  • width de tipo number
  • height de tipo number
  • area: un método (self: Rectangle) -> number que devuelva width * height
  • perimeter: un método (self: Rectangle) -> number que devuelva 2 * (width + height)

Crea una variable rect de tipo Rectangle con un ancho de 4, una altura de 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 sintaxis de punto, pasando rect como self):

  1. el área del rectángulo
  2. el perímetro del rectángulo
  3. el ancho del rectángulo

Pruébalo tú mismo

-- Escribe código aquí
-- 1) define el tipo Rectangle con dos campos numéricos y dos métodos
-- 2) crea rect (width 4, height 6) implementando ambos métodos
-- 3) imprime area, perimeter y width
quiz iconPonte a prueba

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

Practica por tu cuenta: Compilador de Lua online