Ruby | bloques

Un bloque es lo mismo que un método , pero no pertenece a un objeto. Los bloques se denominan cierres en otros lenguajes de programación. Hay algunos puntos importantes sobre los bloques en Ruby:

  • El bloque puede aceptar argumentos y devuelve un valor.
  • El bloque no tiene nombre propio.
  • El bloque consiste en fragmentos de código.
  • Un bloque siempre se invoca con una función o se puede pasar a una llamada de método.
  • Para llamar a un bloque dentro de un método con un valor, se usa la declaración de rendimiento .
  • Los bloques se pueden llamar como métodos desde dentro del método al que se pasan.

Un código de bloque se puede utilizar de dos formas , como se indica a continuación:

  • Dentro de la sentencia do..end Sintaxis:
block_name do 

   #statement-1  
   #statement-2  
   .
   .
end 

Ejemplo: 

Ruby

# Ruby program to demonstrate the block
# defined inside do..end statements
 
# here 'each' is the method name
# or block name
# n is the variable
["Geeks", "GFG", 55].each do |n|  
 puts n  
end  

Salida: .

Geeks
GFG
55
  • En línea entre las llaves {} Sintaxis:
block_name { #statements_to_be_executed }

Ejemplo: 

Ruby

# Ruby program to demonstrate the block
# Inline between the curly braces {}
 
# here 'each' is the method name
# n is the variable
["Geeks", "GFG", 55].each {|i| puts i} 

Salida: .

Geeks
GFG
55

Argumentos de bloque: los argumentos se pueden pasar a bloque encerrándolos entre las tuberías o barras verticales ( | | ). 

Ejemplo: 

Ruby

# Ruby program to demonstrate the
# arguments passing to block
 
# here india_states is an array and
# it is the argument which is to
# be passed to block
india_states = ["Andhra Pardesh", "Assam", "Bihar", "Chhattisgarh",
                "Goa", "Gujarat", "Haryana", "Arunachal Pardesh",
                "Karnataka", "Manipur", "Punjab", "Uttar Pardesh",
                "Uttarakhand"]
  
# passing argument to block
india_states.each do |india_states|
 puts india_states
end

Producción:

Andhra Pardesh
Assam
Bihar
Chhattisgarh
Goa
Gujarat
Haryana
Arunachal Pardesh
Karnataka
Manipur
Punjab
Uttar Pardesh
Uttarakhand

Explicación: En el ejemplo anterior, india_states es el argumento que se pasa al bloque. Aquí es similar a def method_name (india_states) . La única diferencia es que el método tiene un nombre pero no un bloque y los argumentos se pasan entre corchetes () al método pero en bloque, los argumentos se pasan entre conductos ||
Cómo el bloque devuelve valores: En realidad, el bloque devuelve el valor que devuelve el método en el que se llama. 

Ejemplo: 

Ruby

# Ruby program to demonstrate how block returns the values
 
# here two methods called i.e 'select' and 'even?'
# even? method is called inside the block
puts [1, 2, 3, 4, 5].select { |num| num.even? }

Producción:

12
14

Explicación: En el ejemplo anterior, hay dos métodos, es decir , select , even? y un bloque Al principio, el método de selección llamará al bloque para cada número en la array. Primero, pasará el 11 a block, y ahora dentro del bloque, hay otro método llamado even? que lo tomará como variable numérica y devolverá falso para 11. Este valor falso se pasará al método de selección que lo descartará y luego pasará 12 al bloque y de manera similar dentro del bloque, ¿impar?se llama al método que devuelve verdadero para los 12 y este valor verdadero se pasará al método de selección. Ahora seleccione el método que almacenará este valor. De manera similar, para los valores restantes en la array , el método de selección almacenará los valores en la array y, por último, la array final volverá al método puts que imprime los elementos de la array devueltos en la pantalla. 
 

La declaración de rendimiento

La declaración de rendimiento se usa para llamar a un bloque dentro del método usando la palabra clave de rendimiento con un valor. 

Ejemplo: 

Ruby

# Ruby program to demonstrate the yield statement
 
# method
def shivi
     
  # statement of the method to be executed
  puts "Inside Method!"
   
    # using yield statement
    yield
     
  # statement of the method to be executed
  puts "Again Inside Method!"
   
  # using yield statement
  yield
   
end
 
# block
shivi{puts "Inside Block!"}

Producción:

Inside Method!
Inside Block!
Again Inside Method!
Inside Block!

Explicación: En el programa anterior, el nombre del método es shivi . Al principio, se llama a las declaraciones de método que muestran el método interno . Pero tan pronto como se ejecutan las declaraciones de rendimiento, el control va a bloque y el bloque ejecutará sus declaraciones. Tan pronto como el bloque se ejecute, devolverá el control al método y el método continuará ejecutándose desde donde se llamó a la declaración de rendimiento. 

Nota: Los parámetros se pueden pasar a la declaración de rendimiento. 

Ejemplo: 

Ruby

# Ruby program to demonstrate the yield statement
 
# method
def shivi
     
  # statement of the method to be executed
  puts "Inside Method!"
   
    # using yield statement
    # p1 is the parameter
    yield "p1"
     
  # statement of the method to be executed
  puts "Again Inside Method!"
   
  # using yield statement
  # p2 is the parameter
  yield "p2"
   
end
 
# block
shivi{ |para| puts "Inside Block #{para}"}

Producción:

Inside Method!
Inside Block p1
Again Inside Method!
Inside Block p2

Bloque BEGIN y END: el archivo fuente de Ruby tiene una función para declarar el bloque de código que se puede ejecutar a medida que se carga el archivo, es decir, el bloque BEGIN . Después de la ejecución completa del programa , se ejecutará el bloque END . Un programa puede contener más de 1 bloque BEGIN y END. Los bloques BEGIN siempre se ejecutarán en un orden, pero los bloques END se ejecutarán en orden inverso. 

Ejemplo: 

Ruby

# Ruby program to demonstrate the BEGIN and END block
 
#!/usr/bin/ruby
 
# BEGIN block
BEGIN {
     
   # BEGIN block code
   puts "This is BEGIN block Code"
}
 
# END block
END {
     
   # END block code
   puts "This is END block code"
}
 
# Code will execute before END block
puts "Before END block"

Producción:

This is BEGIN block Code
Before END block
This is END block code

Nota: Podemos usar la misma variable fuera y dentro de un bloque. 

Ejemplo: 

Ruby

# Ruby program to demonstrate the use of
# same variable outside and inside a block
 
#!/usr/bin/ruby
  
# variable 'x' outside the block
x = "Outside the block"
 
# here x is inside the block
4.times do |x|   
  puts "Value Inside the block: #{x}"   
end   
 
puts "Value Outside the block: #{x}"

Producción:

Value Inside the block: 0
Value Inside the block: 1
Value Inside the block: 2
Value Inside the block: 3
Value Outside the block: Outside the block

Publicación traducida automáticamente

Artículo escrito por Shivi_Aggarwal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *