Buenas Prácticas con Ruby

Condicionales con case/when en vez de if/elsif

Supongamos que estás escribiendo un programa para hacer a unos estudiantes una pregunta y necesitas una respuesta apropiada. Aquí nos vemos tentados a usar los argumentos if/elsif, pero existe una manera mejor:

puts "¿Cuál es tu materia favorita?" materia = gets.chomp case materia when "Biología" puts "El estudio de la vida misma" when "Computación" puts "¡Hey! ¡Yo soy una computadora!" when "Inglés" puts "No way! What's your favorite book?" when "Matemáticas" puts "El lenguaje universal." else puts "¡Es una gran materia!" end

Usando case/when manejas una variable con varias posibilidades de manera más concisa que con un if/elsif.

El uso del for

Aunque en muchos lenguajes es común usar for, te recomiendo que en Ruby optes por usar bloques con el método each:

[1, 2, 3, 4, 5].each do |elem| puts elem end # O en una línea: [1, 2, 3, 4, 5].each { |elem| puts elem }

Usa splat (*) cuando tengas un número variable de inputs en vez de declarar cada uno:

def mood(name, *feelings) feelings.each do |feeling| puts "#{name} se siente #{feeling} hoy." end end feeling("Paola", "feliz", "triste", "con nervios") # Paola se siente feliz hoy. # Paola se siente triste hoy. # Paola se siente con nervios hoy.

Cuando no necesites mutar el valor de una variable que tiene un dato tipo string, usa el símbolo en vez del string:

a = :apple b = :apple a.object_id == b.object_id #=> true a = "apple" b = "apple" a.object_id == b.object_id #=> false

Si definimos dos diferentes variables con el mismo símbolo, estas apuntan al mismo lugar en la memoria, pero cuando hacemos lo mismo directamente con strings, podemos darnos cuenta que no sucede lo mismo. Para mejorar la eficiencia de nuestro espacio, debemos usar símbolos cuando no se requiera mutar el valor de una variable.

Viendo con un ejemplo más práctico, digamos que queremos contar cuántos artículos existen en nuestra despensa:

despensa = { "leche" => 1, "pan" => 3, "galletas" => 12, "mantequilla" => 2 , "harina" => 1 }

Para esto deberíamos usar símbolo:

despensa = {:leche => 1, :pan => 3, :galletas => 12, :mantequilla => 2, :harina => 1 }

De esta manera, si queremos contar cuántas galletas tenemos, es más fácil al ser más concisos al usar símbolo en vez de string.

Símbolo es exclusivo de Ruby. ¡Úsalo! :D

Por último, no escribas comentarios por las razones equivocadas. Ruby es un lenguaje muy humano y la sintaxis da para que tengamos la capacidad de escribir un código bueno y legible. Un buen código no necesita explicaciones.