Loops

Repetir, repetir, repetir, repetir, repetir...

Sintaxe base

Todos os loops são criados com o sinal de arroba @, por exemplo:

<expressão> @ <corpoDoLoop>

Loop tipo "enquanto"

O corpo do loop irá executar enquanto a expressão avaliar para:

  • verdadeiro
  • número não-zero
  • texto/chunk não-vazio

A execução irá terminar quando a expressão avaliar para:

  • falso
  • nulo
  • número zero
  • texto/chunk vazio
  • erro

Por exemplo, este loop imprime números de 0 a 3:

_ <- fat.console

~ i = 0

(i < 4) @ {
  log(i)
  i += 1
}

Sintaxe de mapeamento

Você pode mapear intervalos, listas e escopos com um mapeador, assim:

<intervalo|coleção> @ <mapeador>

Uma nova lista é gerada com base nos valores de retorno do mapeador.

Mapeando um intervalo

Utilizando o operador de intervalo .. o mapeador receberá um número como entrada sequencialmente do limite esquerdo até o limite direito:

4..0 @ num -> num + 1  # retorna [ 5, 4, 3, 2, 1 ]

a sintaxe de intervalo é inclusiva em ambos os lados, por exemplo, 0..2 retorna 0, 1, 2

Há também o operador de intervalo semiaberto ..<, exclusivo no lado direito.

ressalva: o intervalo semiaberto não funciona com direção inversa, sempre precisa ser do mínimo para máximo

Mapeando uma lista

O mapeador receberá os itens em ordem (da esquerda para a direita):

[ 3, 1, 2 ] @ item -> item + 1  # retorna [ 4, 2, 3 ]

Mapeando um escopo

O mapeador receberá os nomes (chaves) das entradas armazenadas no escopo em ordem alfabética:

{ c = 3, a = 1, b = 2 } @ chave -> chave  # retorna [ 'a', 'b', 'c' ]

nos exemplos, usamos literais de lista e escopo, mas uma entrada ou chamada que avalia para uma lista ou um escopo terá o mesmo efeito

Você pode acessar as entradas de um escopo referindo-se a ele pelo nome, mas neste caso precisa que ele esteja definido no escopo externo, por exemplo:

meuEscopo = { c = 3, a = 1, b = 2 }
meuEscopo @ chave -> meuEscopo(chave)  # retorna [ 1, 2, 3 ]

O FatScript utiliza um recurso de caching inteligente que faz com que esta sintaxe não gere um esforço adicional para buscar o elemento da vez no escopo durante o mapeamento.

results matching ""

    No results matching ""