if / unless en línea
Parte de la sección Lógica y flujo del Journey de Ruby de Coddy — lección 41 de 56.
Ruby te permite poner if y unless al final de una sola sentencia, como un modificador de una sola línea. Se lee casi como inglés.
puts "Adult" if age >= 18
puts "Save your work" unless savedEsto es lo mismo que:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endLa forma en línea destaca para comprobaciones de tipo guarda al principio de un método, o para actualizaciones condicionales puntuales dentro de un bucle:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endAl igual que el ternario, utiliza modificadores en línea para sentencias cortas. Si el cuerpo tuviera más de una sola línea, escribe un bloque if real en su lugar.
Desafío
FácilLee una lista de enteros separados por comas. Para cada número, imprime una línea, pero solo cuando el número sea distinto de cero:
- Imprime
positive: <n>ifn > 0 - Imprime
negative: <n>unlessn >= 0
Ambas líneas deben usar la forma de modificador en línea (sin bloque if, sin else). Después del bucle, imprime Skipped zeros: <count>, donde el conteo es el número de ceros, también calculado sin un bloque if (usa count).
Para la entrada 3,-2,0,5,0, la salida es:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Hoja de referencia
Ruby permite if y unless como modificadores en línea al final de una sola sentencia:
puts "Adult" if age >= 18
puts "Save your work" unless savedÚtil para cláusulas de guarda o actualizaciones condicionales simples:
return if name.nil? || name.empty?
counts[w] += 1 unless w.start_with?("#")Utilice modificadores en línea solo para cuerpos de una sola línea; utilice un bloque if completo para cualquier cosa más larga.
Pruébalo tú mismo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: imprimir usando `if` / `unless` en línea para cada número
# TODO: imprimir Ceros omitidos: <n> usando count
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y flujo
1Strings en profundidad
Visión general de los métodos de StringInterpolación de StringsIterar sobre StringsSplit y JoinRepaso - String Weaver4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end vs llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasResumen - Iterador personalizado7Hashes Parte 2
Hash.new con valores por defectoIteración de HashesHashes anidadosFusión y transformaciónResumen - Contador de frecuencia10Proyecto - Registros de Estudiantes
Descripción general del proyectoAgregar estudiante5Potencia de Enumerable
Select y RejectEncadenando MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byResumen - Data Pipeline8Toma de decisiones avanzada
Case con clases y Regexwhen con múltiples valoresOperador ternarioif / unless en líneaRepaso - Clasificador de calificaciones