Controle de fluxo
Avance em um fluxo contínuo de decisões que devem ser tomadas.
Fallback
As operações padrão ou de coalescência nula são definidas com dois pontos de interrogação ??
e funcionam da seguinte maneira:
<expressãoTalvezNulaOuFalha> ?? <valorFallback>
Caso o lado esquerdo não seja null
nem Error
, então ele é usado; caso contrário, o valor de fallback é retornado.
If
Declarações If
são definidas com um ponto de interrogação ?
, como abaixo:
<condição> ? <resposta>
como não há alternativa,
null
é retornado se a condição não for atendida
If-Else
Declarações If-Else
são definidas com um ponto de interrogação ?
seguido de dois pontos :
, como abaixo:
<condição> ? <resposta> : <alternativa>
Para usar declarações If-Else
multilinhas, envolva a resposta em chaves {...}
assim:
<condição> ? {
<resposta>
} : {
<alternativa>
}
Cases
Cases são definidos com a seta espessa =>
e são automaticamente encadeados, criando uma sintaxe intuitiva e simplificada, semelhante a uma declaração switch, sem a possibilidade de queda. Isso permite que condições não relacionadas sejam misturadas, resultando em uma estrutura if-else-if-else mais concisa:
<condição1> => <respostaPara1>
<condição2> => <respostaPara2>
<condição3> => <respostaPara3>
...
Exemplo:
escolha = (x) -> {
x == 1 => 'a'
x == 2 => 'b'
x == 3 => 'c'
}
escolha(2) # 'b'
escolha(8) # null
Para fornecer um valor padrão para seu método, você pode adicionar um caso pega-tudo usando um sublinhado _
no final da sequência:
escolha = (x) -> {
x == 1 => 'a'
x == 2 => 'b'
x == 3 => 'c'
_ => 'd'
}
escolha(2) # 'b'
escolha(8) # 'd'
Para cenários mais complexos, você pode usar blocos como resultados para cada caso:
...
condição => {
# faça algo
'foo'
}
_ => {
# faça outra coisa
'bar'
}
...
Cases devem terminar em um caso pega-tudo _
ou final do bloco. O uso mais efetivo de Cases é dentro de métodos na parte inferior do corpo do método.
Embora seja possível adicionar Cases aninhados, é melhor evitar construções excessivamente complexas. Isso torna o código mais difícil de seguir e provavelmente perde o objetivo de usar esse recurso.
Pode ser mais apropriado extrair essa lógica para um método separado. O FatScript incentiva os desenvolvedores a dividir a lógica em métodos distintos, ajudando a evitar código spaghetti.