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)
