Uso de la declaración Ruby Case (Switch)

En la mayoría de los lenguajes de computadora, el caso o condicional (también conocido como cambiar) compara el valor de una variable con el de varias constantes o literales y ejecuta la primera ruta con un caso coincidente. En Ruby, es un poco más flexible (y poderoso).

En lugar de realizar una simple prueba de igualdad, se utiliza el operador de igualdad de casos, lo que abre la puerta a muchos usos nuevos..

Sin embargo, hay algunas diferencias con otros idiomas. En C, una declaración de cambio es un tipo de reemplazo para una serie de si y goto declaraciones. Los casos son técnicamente etiquetas, y la declaración de cambio irá a la etiqueta correspondiente. Esto exhibe un comportamiento llamado "fallthrough", ya que la ejecución no se detiene cuando alcanza otra etiqueta.

Por lo general, esto se evita utilizando una declaración de interrupción, pero la falla a veces es intencional. La declaración del caso en Ruby, por otro lado, puede verse como una abreviatura de una serie de Si declaraciones. No hay fallthrough, solo se ejecutará el primer caso coincidente.

La forma básica de una declaración de caso

La forma básica de una declaración de caso es la siguiente.

Como puede ver, esto está estructurado de manera similar a una declaración condicional if / else if / else. El nombre (que llamaremos el valor), en este caso ingresado desde el teclado, se compara con cada uno de los casos desde el cuando cláusulas (es decir. casos), y el primero cuando se ejecutará el bloque con un caso coincidente. Si ninguno de ellos coincide, el más bloque se ejecutará.

Lo interesante aquí es cómo El valor se compara con cada uno de los casos. Como se mencionó anteriormente, en C ++ y otros lenguajes similares a C, se utiliza una comparación de valores simple. En Ruby, se usa el operador de igualdad de casos.

Recuerde que el tipo del lado izquierdo de un operador de igualdad de casos es importante, y los casos son siempre el lado izquierdo. Entonces, para cada cuando cláusula, Ruby evaluará caso === valor hasta que encuentre una coincidencia.

Si tuviéramos que ingresar Beto, Ruby evaluaría primero "Alice" === "Bob", lo cual sería falso desde Cadena # === se define como la comparación de las cadenas. próximo, /[qrzfont>.+/i === "Bob" sería ejecutado, lo cual es falso ya que Beto no comienza con Q, R o Z.

Como ninguno de los casos coincide, Ruby ejecutará la cláusula else.

Cómo entra en juego el tipo

Un uso común de la declaración del caso es determinar el tipo de valor y hacer algo diferente dependiendo de su tipo. Aunque esto rompe el tipeo habitual del pato de Ruby, a veces es necesario hacer las cosas.

Esto funciona usando el Clase # === (técnicamente, el Módulo # ===) operador, que prueba si el lado derecho es un? lado izquierdo.

La sintaxis es simple y elegante:

Otra forma posible

Si el valor se omite, la declaración de caso funciona un poco diferente: funciona casi exactamente como una declaración if / else if / else. Las ventajas de usar la declaración del caso sobre un Si declaración, en este caso, son meramente cosméticos.

Una sintaxis más compacta

Hay momentos en que hay una gran cantidad de pequeños cuando cláusulas Tal declaración de caso fácilmente crece demasiado para caber en la pantalla. Cuando este es el caso (sin juego de palabras), puede usar el luego palabra clave para poner el cuerpo de la cuando cláusula en la misma línea.

Si bien esto genera un código muy denso, siempre que cada uno cuando cláusula es muy similar, en realidad se convierte más legible.

Cuando debe usar una sola línea y varias líneas cuando las cláusulas dependen de usted, es cuestión de estilo. Sin embargo, no se recomienda mezclar los dos: una declaración de caso debe seguir un patrón para que sea lo más legible posible.

Asignación de caso

Al igual que las declaraciones if, las declaraciones de casos se evalúan hasta la última declaración en el cuando cláusula. En otras palabras, se pueden usar en tareas para proporcionar una especie de tabla. Sin embargo, no olvide que las declaraciones de casos son mucho más poderosas que las matrices simples o las búsquedas hash. Tal tabla no necesariamente necesita usar literales en el cuando cláusulas.

Si no hay coincidencia cuando la cláusula y ninguna otra cláusula, la declaración del caso evaluará a nulo.