Mayúsculas y rangos en Ruby

Mehdi Farsi

Sigue

Jul 22, 2019 – 3 min read

En este artículo, vamos a explorar los siguientes temas:

  • El operador ..
  • El operador …
  • Rangos y valores flotantes

No dudes en libre de leer el artículo Case statement behind the scene si no estás familiarizado con la sentencia case y la cláusula when.

Antes de empezar

Estoy encantado de compartir con vosotros nuestro último proyecto: Fun Facts about Ruby – Volume 1

¡Por favor, no dudes en difundirlo y compartir este post! 🙏

¡Gracias por tu tiempo!

En una sentencia case las cláusulas when pueden tomar un rango como parámetro

Aquí, la sentencia case toma un entero como parámetro.

Como la cláusula when toma un rango como parámetro entonces se invoca el operador Range#=== y se comprueba si el entero está incluido en el rango.

El operador .. en nuestro rango asegura que los operandos izquierdo y derecho están incluidos en el rango.

La segunda cláusula when toma un rango usando el operador ….

Esto significa que el operando derecho no está incluido en el rango.

Ahora que estamos más familiarizados con la cláusula when y los rangos, vamos a desglosar un caso límite que me he encontrado usando floats y rangos.

Rango de valores flotantes y la cláusula when

Como hemos visto en el ejemplo anterior, el operador … excluye el operando derecho del rango. Pero, ¿qué pasa si quiero excluir el operando izquierdo?

Aquí, sólo se procesa el contenido de la primera cláusula when que coincide con el valor surface – en nuestro caso when 70..90 then :second_value.

En este caso, la sentencia case devuelve :second_value.

Así que la siguiente cláusula when nunca se evalúa para un surface de 90.

Esto funciona bien para un rango de enteros.

¿Pero qué pasa si tenemos que tratar con un rango de flotantes?

Aquí, la sentencia case devuelve :third_value ya que surface es estrictamente mayor que 130.0.

Si reasignamos surface = 130.0 entonces nuestra sentencia case devuelve :second_value – igual que los rangos de enteros.

Nota que usamos la constante Float::INFINITY para terminar nuestro último rango.

Esto es equivalente a cualquier valor por encima de 130.0.

Por último, echemos un vistazo a la noción de rangos infinitos – Esta noción ha sido introducida en Ruby 2.6.0.

En la línea 6, el rango omite explícitamente el operando derecho.

Ruby interpreta esto como lo siguiente: 130..Float::INFINITY

Esto nos permite evitar llamar implícitamente al para terminar nuestro rango.

Así que aquí, el valor de surface coincide con esta comparación y la sentencia case devuelve :third_value.

¡Voilà!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *