Category: Ruby

false Ruby === Ruby

Cuando trabajamos con lenguajes como PHP o Javascript, existe un operador que conocemos bastante bien: ===.

Este operador es sumamente útil en lenguajes que “creen” que "123" == 123 -> true o 0 == false -> true. Esto hace que errores como if (strpos( ... )) {, sean tan comunes que en la documentación de strpos, nos encontremos con:

strpos warning
Advertencia en documentación de strpos, PHP.

Entonces, la solución es usar ===, que además de comparar que las expresiones tengan el mismo valor, se asegura de que sean de el mismo tipo, así "123" == 123 -> true pero 0 === false -> false. Excelente.

Pero en Ruby, es otra historia. Para empezar, en Ruby "123" == 123 -> false, 0 == false -> false, etc. Ruby es un poquito más estricto en este tipo de cosas.

Una buena definición de este operador en Ruby, es “Si tengo un cajón con la etiqueta a, tiene sentido poner b en ese cajón?” (“If I have a drawer labelled a would it make sense to put b in that drawer?”, visto en Stack Overflow). Es decir, si tengo un cajón con la etiqueta String, puedo poner "hola" y "123", aunque no al revés: Si tengo un cajón con la etiqueta "123", puedo poner "123" pero no String.

String === "123" -> true
String === 123 -> false
"123" === "123" -> true
"123" === String -> false

Por otro lado, puedo tener un cajón con la etiqueta (1..10), y en ese cajón puedo poner números entre 1 y 10:

(1..10) === 4 -> true
(1..10) === 10 -> true
(1..10) === 15 -> false

Además, el resultado de este operador es el usado para el case, lo que le da una utilidad muy genial!

case edad
when 0 # -> 0 === edad
  puts "hum.."
when (1...18) # -> (1...18) === edad
  puts "menor"
else
  puts "mayor"
end

Espero sea de utilidad para alguien 🙂