ciclos.step

goals do
  goal "Usar ciclos para hacer operaciones por cada elemento de un arreglo."
  goal do
    rawtext(md2html("Usar `puts` para imprimir cadenas en la pantalla."))
  end
  goal 'Aprender dos sintaxis diferentes para crear bloques en Ruby.'
end

step do
  irb <<-IRB
puts 'Hola Mundo'
  IRB
  message '`puts` (**put** **s**tring) es una manera de imprimir información para el usuario de tu programa.'
  message 'Toma algo de tiempo para contemplar la salida de `puts` en irb:'
  result <<-RESULT
1.9.3p125 :006 > puts 'Hola Mundo'
Hola Mundo
 => nil
1.9.3p125 :007 >
  RESULT
  message 'El método `puts` siempre tiene el **valor de retorno** `nil`, que es lo que ves después de `=>` en la salida. Imprimir \'Hola Mundo\' en la pantalla es solo un efecto secundario.'
end

step do
  irb <<-IRB
frutas = ['durazno', 'ciruela', 'pera']
frutas.each { |fruta| puts fruta }
  IRB
  message 'La línea vertical `|` es llamada \'caracter pipe\', y es típicamente una versión cambiada de la `\` (diagonal invertida) en tu teclado. '
  message 'Los ciclos son una manera de hacer algo varias veces. En este ciclo, imprimimos cada fruta en la pantalla.'
end

step do
  irb <<-IRB
numeros = [109, 10, 1001]
numeros.each { |n| puts n * 2 }
  IRB
  message 'Las llaves aquí definen un **bloque**, y lo que sea que está entre los pipes es una **variable de bloque**.'
  message '`each` toma el primer elemento en el arreglo y lo envía al bloque, el cual temporalmente se guarda en la **variable de bloque**, luego ejecuta el código que se encuentra después de los pipes. Regresa y hace esto de nuevo por cada uno de los elementos.'
  irb <<-'IRB'
patos = ['hugo', 'paco', 'luis']
patos.each { |pato| puts "¡#{pato} cuac!" }
patos.each { |zombie| puts "¡#{zombie} cuac!" }
  IRB
  message 'No importa cómo llames a tu variable de bloque: las dos sentencias anteriores son exactamente equivalentes para Ruby. Sin embargo deberías asignar un nombre útil, ¡así el código tendrá sentido para ti después! '
end

step do
    irb <<-'IRB'
total = 256 ** 3
colores = ['rojo', 'azul', 'verde']
colores.each do |color|
  puts "#{total} colores de la pintura en la pared... "
  puts "Elige un #{color}, pásalo..."
  total = total - 1
  puts "¡#{total} colores de la pintura en la pared!"
end
    IRB
    message "El operador ** significa 'a la potencia de', como en '256 a la tercera potencia'"
    message "Hay más de una manera de crear un bloque en ruby. La sintaxis `do ... end` es comúnmente usada cuando un bloque necesita extenderse en varias líneas, mientras que la sintaxis `{ ... }` es para un bloque de una sola línea."
end

explanation do
  message "A medida que construyes programas complejos, querrás crear algo para muchas piezas de datos sin tener que escribirlo todo. Los ciclos ayudan a resolver este tipo de problemas."
end

next_step 'ejecutar_programas_desde_un_archivo'