Como usar a instrução Case / Switch no Ruby

Na maioria linguagens de computador, o caso ou condicional (também conhecido como interruptor) compara o valor de uma variável com o de várias constantes ou literais e executa o primeiro caminho com um caso correspondente. Dentro Rubi, é um pouco mais flexível (e poderoso).

Em vez de um simples teste de igualdade ser realizado, o operador de igualdade de caso é usado, abrindo a porta para muitos novos usos.

Existem algumas diferenças em relação a outros idiomas. Dentro C, uma instrução switch é um tipo de substituição para uma série de se e ir afirmações. Os casos são tecnicamente rótulos e os instrução switch irá para o rótulo correspondente. Isso exibe um comportamento chamado "avanço", pois a execução não para quando atinge outro rótulo.

Isso geralmente é evitado usando uma declaração de interrupção, mas a inovação às vezes é intencional. A declaração de caso em Ruby, por outro lado, pode ser vista como um atalho para uma série de E se afirmações. Não há explicação, apenas o primeiro caso correspondente será executado.

instagram viewer

A forma básica de uma declaração de caso

A forma básica de uma declaração de caso é a seguinte.

Como você pode ver, isso está estruturado como uma declaração condicional if / else if / else. O nome (que chamaremos de valor), nesse caso, digitado no teclado, é comparado a cada um dos casos do quando cláusulas (ou seja, casos) e o primeiro quando o bloco com um caso correspondente será executado. Se nenhum deles corresponder, o outro bloco será executado.

O interessante aqui é como o valor é comparado a cada um dos casos. Como mencionado acima, em C ++e outras linguagens do tipo C, é usada uma comparação simples de valores. No Ruby, o operador de igualdade de caso é usado.

Lembre-se de que o tipo do lado esquerdo de um operador de igualdade de casos é importante e os casos são sempre do lado esquerdo. Então, para cada quando cláusula, Ruby avaliará valor do caso até encontrar uma correspondência.

Se fôssemos inserir Prumo, Ruby avaliaria primeiro "Alice" "Bob", o que seria falso desde Corda# é definido como a comparação das seqüências de caracteres. Próximo, ///qrzorgeous.+/i "Bob" seria executado, o que é falso, já que Prumo não começa com Q, R ou Z.

Como nenhum dos casos correspondeu, Ruby executará a cláusula else.

Como o tipo entra em jogo

Um uso comum da instrução case é determinar o tipo de valor e fazer algo diferente, dependendo do seu tipo. Embora isso interrompa a digitação de pato habitual de Ruby, às vezes é necessário fazer as coisas.

Isso funciona usando o Classe# (tecnicamente, o Módulo#), que testa se o lado direito é um? lado esquerdo.

A sintaxe é simples e elegante:

Outra forma possível

Se o valor omitida, a instrução case funciona de maneira um pouco diferente: funciona quase exatamente como uma instrução if / else if / else. As vantagens de usar a declaração de caso sobre umE se declaração, neste caso, são meramente cosméticos.

Uma sintaxe mais compacta

Há momentos em que há um grande número de pequenos quando cláusulas. Tal declaração de caso cresce facilmente demais para caber na tela. Quando este for o caso (sem trocadilhos), você pode usar o então palavra-chave para colocar o corpo do quando cláusula na mesma linha.

Enquanto isso cria um código muito denso, desde que cada quando cláusula é muito semelhante, torna-se realmente Mais legível.

Quando você deve usar uma linha e várias linhas quando as cláusulas são suas, é uma questão de estilo. No entanto, não é recomendável misturar os dois - uma declaração de caso deve seguir um padrão para ser o mais legível possível.

Atribuição de Caso

Como declarações if, as declarações de caso são avaliadas até a última declaração no quando cláusula. Em outras palavras, eles podem ser usados ​​em atribuições para fornecer um tipo de tabela. No entanto, não esqueça que as instruções de caso são muito mais poderosas do que simples pesquisas de array ou hash. Essa tabela não precisa necessariamente usar literais no quando cláusulas.

Se não houver nenhuma correspondência entre a cláusula when e nenhuma outra cláusula, a instrução case será avaliada como nada.

instagram story viewer