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.

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.

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 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):

  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 number 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