🔄 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.