Menu
Coddy logo textTech

Tipando Funções Anônimas

Parte da seção Introdução ao Luau do Journey de Lua da Coddy — lição 23 de 73.

Em Lua, funções são valores — você as armazenou em variáveis e as passou de um lado para o outro: local f = function(x) return x * 2 end. Essas funções anônimas (expressões de função) recebem anotações de tipo exatamente como as funções nomeadas fazem:

local double = function(x: number): number
    return x * 2
end

local shout = function(text: string): string
    return string.upper(text) .. "!"
end

Parâmetros recebem name: type dentro dos parênteses, e o tipo de retorno segue após o parêntese de fechamento — a única diferença para uma função nomeada é que a palavra-chave function não tem um nome e a expressão inteira é atribuída a uma variável.

Se você já viu JavaScript ou TypeScript, note que o Luau não possui arrow functions — não existe sintaxe =>. Toda expressão de função é escrita com function ... end, seja longa ou curta.

Uma vez atribuída, você a chama através da variável como qualquer função: double(21) retorna 42, e o verificador valida cada chamada em relação às anotações que você escreveu.

challenge icon

Desafio

Fácil

Reescreva esta função nomeada como uma função anônima armazenada em uma variável local, mantendo todas as anotações de tipo:

function subtract(a: number, b: number): number
    return a - b
end

Portanto: crie local subtract = function(...) ... end com os mesmos tipos de parâmetros e de retorno.

Em seguida, crie mais duas funções anônimas tipadas:

  • createMessage — recebe text: string, retorna a string "Message: [text]" (tipo de retorno string)
  • isPositive — recebe num: number, retorna true se o número for maior que 0, caso contrário false (tipo de retorno boolean)

Chame e imprima, cada um em sua própria linha:

  1. subtract(10, 3)
  2. createMessage("Hello World")
  3. isPositive(-5)
  4. isPositive(8)

Experimente você mesmo

-- Escreva o código aqui
-- local subtract = function(a: number, b: number): number ... end
-- local createMessage = function(text: string): string ... end
-- local isPositive = function(num: number): boolean ... end
-- então imprima os quatro resultados
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Introdução ao Luau