
/div>

/div>
/div>
/div>
Neste artigo, vamos explorar os seguintes tópicos:
- O
..
operador - O … operador
- intervalos e valores flutuantes
Feel pode ler gratuitamente o artigo
Case statement behind the scene
se não estiver familiarizado com ocase
declaração e a cláusulawhen
.
Antes de começar
Estou entusiasmado por partilhar consigo o nosso mais recente projecto: Fun Facts about Ruby – Volume 1
Por favor sinta-se à vontade para espalhar a palavra e partilhar este post! 🙏
Obrigado pelo seu tempo!
Num case
declaração o when
cláusulas podem ter um intervalo como parâmetro
p>aqui, a declaração case
toma como parâmetro um número inteiro.
Como a cláusula when
toma um intervalo como parâmetro, então o operador Range#===
é invocado e verifica se o número inteiro está incluído no intervalo.
O operador ..
na nossa gama assegura que os operandos esquerdo e direito estão incluídos na gama.
O segundo when
a cláusula toma uma gama utilizando o operador … operator.
Isto significa que o operando direito não está incluído na gama.
Agora que estamos mais familiarizados com o when
cláusula e intervalos, vamos decompor um caso de margem que encontrei utilizando flutuadores e intervalos.
Intervalo de valores flutuantes e a cláusula quando
Como vimos no exemplo acima, o operador … exclui o operando correcto do intervalo. Mas, e se eu quiser excluir o operando da esquerda?
Here, apenas o conteúdo do primeiro when
cláusula que corresponde ao surface
valor é processado – no nosso caso when 70..90 then :second_value
.
Neste caso, o case
declaração retorna :second_value
.
Então o próximo when
cláusula nunca é avaliada para um surface
de 90
.
Isto funciona bem para uma gama de inteiros.
Mas e se tivermos de lidar com uma gama de flutuadores?
Aqui, o retorno da declaração de caso as surface
é estritamente superior a 130.0
.
se reatribuímos surface = 130.0
então o nosso case
declaração retorna :second_value
– o mesmo que as gamas de números inteiros.
Nota que usamos o Float::INFINITY
constante para terminar o nosso último intervalo.
Isto é equivalente a qualquer valor acima de 130.0
.
Finalmente vamos ver a noção de intervalos infinitos – Esta noção foi introduzida em Ruby 2.6.0.
Na linha 6, a gama omite explicitamente o operando correcto.
p>Ruby interpreta isto como se segue: 130..Float::INFINITY
Isto permite-nos evitar chamar implicitamente o para terminar a nossa gama.
Então aqui, o valor de surface
coincide com esta comparação e o case
devolve a declaração :third_value
.
Voilà!