---
title: Functional
slug: aura/functional
docTags: 
createdAt: 2025-07-07T20:39:55.891Z
---

Métodos utilizados para programação funcional.

## Atalhos

- **[Map](docId\:X4ZH7Ih_88YMiMQtyIXCC)**
- **[Filter](#)**
- **[Reduce](docId\:X4ZH7Ih_88YMiMQtyIXCC)**
- **[Windows](docId\:X4ZH7Ih_88YMiMQtyIXCC)**

***

### Métodos

### Map

Cria uma nova tabela preenchida com os resultados da chamada de uma função fornecida em cada elemento da tabela de chamada.

```lua
-- @param table Tabela que será usada na função.
-- @param callbackFn Uma função a ser executada para cada elemento na tabela.
-- @return table Uma nova tabela com os elementos mapeados 
table.map(table, callbackFn)
```

```lua
-- example usage:

local t = { 10, 20, 30}

local result = table.filter(t, function(x) return x * 2 end)

-- {20, 40, 60}
```

### Filter

Cria uma cópia de uma parte de uma determinada matriz, filtrada apenas para os elementos da matriz fornecida que passam no teste implementado pela função fornecida.

```lua
-- @param table Tabela que será usada na função.
-- @param callbackFn Uma função a ser executada para cada elemento do array. Ela deve retornar um valor verdadeiro para manter o elemento no array resultante e um valor falso caso contrário.
-- @return table Uma nova tabela com os elementos mapeados 
table.filter(table, callbackFn)
```

```lua
-- example usage:

local t = { 90, 19, 16, 14, 1, 2, 3, 4, 5, 6, 7, 8 }

local result = table.filter(t, function(x) return x > 5 end)

-- {90, 19, 16, 14, 6, 7, 8}
```

### Reduce

O método reduce() executa uma função de retorno de chamada "redutor" fornecida pelo usuário em cada elemento do array, em ordem, passando o valor de retorno do cálculo no elemento anterior. O resultado final da execução do redutor em todos os elementos do array é um único valor.

```lua
table.reduce(table, callbackFn(accumulator, value), initialValue)
```

- **table** Tabela que será usada na função.
- **callbackFn** Uma função a ser executada para cada elemento de uma tabela. Seu valor de retorno se torna o valor do parâmetro accumulator na próxima invocação de callbackFn. Para a última invocação, o valor de retorno se torna o valor de retorno de reduce(). A função é chamada com os seguintes argumentos:
  - **accumulator** O valor resultante da chamada anterior para callbackFn. Na primeira chamada, seu valor é initialValue se o último for especificado; caso contrário, seu valor é `table[1]`.
  - **value** O valor do elemento atual. Na primeira chamada, seu valor é `table[1]` se initialValue for especificado; caso contrário, seu valor é `table[2]`.
- **initialValue** Um valor para o qual o acumulador é inicializado na primeira vez que o retorno de chamada é chamado. Se initialValue for especificado, callbackFn inicia a execução com o primeiro valor no array como currentValue. Se initialValue não for especificado, o acumulador é inicializado com o primeiro valor da tabela e callbackFn inicia a execução com o segundo valor na tabela como currentValue.

### Valor de retorno

O valor resultante da execução da função de retorno de chamada "redutor" até a conclusão em todo o array.

:::BlockQuote
OBSERVAÇÃO: Na linguagem de programação Lua, o indice de posição de um elemento em uma tabela (Array) começa em 1.
:::

```lua
-- example usage:

local t = { 2, 3, 4, 5 }

local result = table.reduce(t, function(accum, value) return accum * value end, 2)

-- 240
```

### Windows

Cria janelas continuas de tamanho `size` de uma tabela.

```lua
-- @param table Tabela que será usada na função.
-- @param size Tamanho da janela
-- @return table Uma nova tabela com todas as janelas 
table.windows(table, size)
```

```lua
-- example usage:

local t = { 1, 2, 3, 4}

local result = table.windows(t, 3)

--[[ 
result: 

{
    {1, 2, 3}, 
    {2, 3, 4}
}

]]--
```

