Se pueden hacer de 2 formas:
- Por convención, si lo que vamos a ejecutar tiene una sola linea lo meteremos entre llaves:
contactos.each { |key,value| puts "La llave es #{key} y el valor es #{value}"}
- Si tiene mas de una linea, utilizamos do y end
loop do puts "QUIERES EJECUTAR OTRO CICLO? s/n" respuesta = gets.chomp if respuesta == "n" break end puts "Volvemos a otro Ciclo" end
Los parámetros en ambos casos se pueden usar:
7.times { |time| puts "hey estoy en la iteracion numero #{time}" }
7.times do |time| puts "Empiezo" puts "hey estoy en la iteracion numero #{time}" puts "Termino!" end
Pasar un Bloque de Código a una Función o Método
**El yield es para saltar a nuestro bloque de código que nos han pasado. **Como llamar a un callback en Javascript.
- Sin parámetros:
def saludar puts "Hola!!!" yield end saludar do puts "Hola desde nuestro bloque" end #RESULTADO: #Hola!!! #Hola desde nuestro bloque
- Con Parámetros:
def saludar(nombre) puts "Hola #{nombre}!!!" yield end saludar("Pepe") do puts "Hola desde nuestro bloque" end #RESULTADO: #Hola Pepe!!! #Hola desde nuestro bloque
def saludar nombre = "Pepe" hora = 4 yield hora,nombre end saludar do |hora_cliente, nombre_cliente = "mi niño"| puts "Que paso #{nombre_cliente}? Son las #{hora_cliente}" end #RESULTADO: #Que paso Pepe? Son las 4
def suma(num1, num2, &block) resultado = num1 + num2 block.call resultado end suma(4,8) do |response| puts "El resultado de la suma es #{response}" end
Verificar si nos han mandado el bloque de código con block_given?
def suma(num1, num2, &block) resultado = num1 + num2 if block_given? block.call resultado else puts "El Calculo es #{resultado}" end end suma(4, 8) do |response| puts "El Resultado es #{response}" end ### RESULTADO: #El Resultado es 12 suma(4, 8) ### RESULTADO: #El Calculo es 12
def hablar(nombre) if block_given? yield(nombre) else "Soy #{nombre} y estoy hablando" end end puts hablar("Pepe") puts hablar("Pepe"){|texto| "#{texto} habla lo que yo diga"}
array_example = ["a", "b", "c"] array_example.each_index {|index| puts ".- #{index}" }
El método delete no devuelve nada si no existe el parametro que buscamos, pero admite que le mandemos una función, para que la ejecute si pasara esto.
array_example = [1, 2, 3] puts array_example.delete("5") {"no existe"} #RESULTADO: no existe puts array_example.delete("5") #RESULTADO: (NADA por default)