Módulo 3-4: Estructuras de Control
Domina el flujo de control y lógica de programación
🔄 Módulo 3-4: Estructuras de Control
Duración: Semanas 3 y 4
Objetivos del Módulo
- Entender y usar condicionales (if, unless, case)
- Dominar los diferentes tipos de bucles (for, while, until)
- Practicar con iteradores y blocks
- Controlar el flujo de ejecución de programas
Contenido Teórico
1. Condicionales
Las estructuras condicionales nos permiten ejecutar código diferente basado en ciertas condiciones.
if / elsif / else
age = 18
if age >= 18
puts "You are an adult"
elsif age >= 13
puts "You are a teenager"
else
puts "You are a child"
end
unless (si no)
is_raining = false
unless is_raining
puts "Let's go to the park"
else
puts "Let's stay home"
end
Modificadores de línea
puts "It's hot" if temperature > 30
puts "It's not raining" unless is_raining
case / when
weekday = "monday"
case weekday
when "monday", "tuesday", "wednesday", "thursday", "friday"
puts "It's a work day"
when "saturday", "sunday"
puts "It's weekend"
else
puts "Invalid day"
end
2. Operadores Ternarios
Una forma corta de escribir if/else:
age = 20
message = age >= 18 ? "Adult" : "Minor"
puts message
3. Bucles
Los bucles nos permiten repetir código múltiples veces.
while (mientras)
counter = 1
while counter <= 5
puts "Number: #{counter}"
counter += 1 # counter = counter + 1
end
until (hasta que)
number = 1
until number > 5
puts "Number: #{number}"
number += 1
end
for
for i in 1..5
puts "Iteration: #{i}"
end
# With arrays
names = ["Ana", "Luis", "Carmen"]
for name in names
puts "Hello #{name}"
end
4. Iteradores
Los iteradores son la forma más “Ruby” de trabajar con bucles.
times
5.times do |i|
puts "Iteration number #{i}"
end
# Versión corta para una línea
3.times { |i| puts "Number #{i}" }
each
# Con arrays
fruits = ["apple", "banana", "orange"]
fruits.each do |fruit|
puts "I like #{fruit}"
end
# Con rangos
(1..3).each { |num| puts "Number #{num}" }
each_with_index
colors = ["red", "green", "blue"]
colors.each_with_index do |color, index|
puts "#{index}: #{color}"
end
upto / downto
1.upto(5) { |i| puts "Going up: #{i}" }
5.downto(1) { |i| puts "Going down: #{i}" }
step
0.step(10, 2) { |i| puts "Even: #{i}" } # 0, 2, 4, 6, 8, 10
5. Control de Flujo
break (salir del bucle)
10.times do |i|
break if i == 5
puts i
end
# Prints: 0, 1, 2, 3, 4
next (saltar a la siguiente iteración)
10.times do |i|
next if i.even? # Skip even numbers
puts i
end
# Prints: 1, 3, 5, 7, 9
6. Ranges (Rangos)
# Rango inclusivo
(1..5).each { |i| puts i } # 1, 2, 3, 4, 5
# Rango exclusivo
(1...5).each { |i| puts i } # 1, 2, 3, 4
# Verificar si un valor está en el rango
puts (1..10).include?(5) # true
puts (1..10).cover?(15) # false
7. Arrays Básicos
Para trabajar mejor con iteradores:
# Crear arrays
numbers = [1, 2, 3, 4, 5]
names = ["Ana", "Luis", "Carmen"]
mixed = [1, "hello", true, 3.14]
# Acceso a elementos
puts numbers[0] # First element: 1
puts numbers[-1] # Last element: 5
puts numbers[1..3] # Elements from index 1 to 3
# Métodos útiles
puts numbers.length # Array size
puts numbers.empty? # Is it empty?
puts numbers.include?(3) # Contains 3?
Ejercicios Prácticos
Ve al archivo ejercicios.rb para practicar los conceptos aprendidos.
Proyecto del Módulo
Ve al archivo proyecto_juego_adivinanza.rb para completar el proyecto de este módulo.