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 no sea 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 recuento 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: 2Pruébalo tú mismo
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: imprimir usando `if` / `unless` en línea para cada número
# TODO: print Skipped zeros: <n> using 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
1Cadenas en profundidad
Descripción general de los métodos de cadenasInterpolación de cadenasIteración sobre cadenasSeparar y unirRepaso: Tejedor de cadenas4Bloques, Procs y Lambdas
¿Qué es un bloque?do..end frente a llavesLa palabra clave yieldParámetros de bloqueProcs y LambdasRepaso: iterador personalizado7Hashes Parte 2
Hash.new con valores predeterminadosIteración de hashesHashes anidadosCombinación y transformaciónRepaso: contador de frecuencias10Proyecto - Registros de estudiantes
Descripción general del proyectoAgregar estudiante5Potencia Enumerable
Select y RejectEncadenamiento de MapReduce / Injectcount, all?, any?, none?group_by y partitionsort_by, min_by, max_byRepaso: canalización de datos8Toma de decisiones avanzada
Case con clases y Regexwhen con múltiples valoresOperador ternarioif / unless en líneaRepaso - Clasificador de calificacionesPractica por tu cuenta: Compilador de Ruby online