Ruby - Blocos
Você viu como Ruby define métodos onde você pode colocar um número de instruções e então chamar esse método. Da mesma forma, Ruby tem um conceito de Bloco.
Um bloco consiste em pedaços de código.
Você atribui um nome a um bloco.
O código no bloco está sempre entre colchetes ({}).
Um bloco é sempre invocado a partir de uma função com o mesmo nome do bloco. Isso significa que, se você tiver um bloco com o nome teste , use o teste de função para invocar esse bloco.
Você invoca um bloco usando a instrução de rendimento .
Sintaxe
block_name {
statement1
statement2
..........
}
Aqui, você aprenderá a invocar um bloco usando uma instrução de rendimento simples . Você também aprenderá a usar uma instrução de rendimento com parâmetros para invocar um bloco. Você verificará o código de amostra com os dois tipos de declarações de rendimento .
A declaração de rendimento
Vejamos um exemplo da declaração de rendimento -
#!/usr/bin/ruby
def test
puts "You are in the method"
yield
puts "You are again back to the method"
yield
end
test {puts "You are in the block"}
Isso produzirá o seguinte resultado -
You are in the method
You are in the block
You are again back to the method
You are in the block
Você também pode passar parâmetros com a declaração de rendimento. Aqui está um exemplo -
#!/usr/bin/ruby
def test
yield 5
puts "You are in the method test"
yield 100
end
test {|i| puts "You are in the block #{i}"}
Isso produzirá o seguinte resultado -
You are in the block 5
You are in the method test
You are in the block 100
Aqui, a declaração de rendimento é escrita seguida por parâmetros. Você pode até passar mais de um parâmetro. No bloco, você coloca uma variável entre duas linhas verticais (||) para aceitar os parâmetros. Portanto, no código anterior, a instrução yield 5 passa o valor 5 como um parâmetro para o bloco de teste.
Agora, olhe para a seguinte declaração -
test {|i| puts "You are in the block #{i}"}
Aqui, o valor 5 é recebido na variável i . Agora, observe a seguinte instrução puts -
puts "You are in the block #{i}"
A saída desta instrução puts é -
You are in the block 5
Se você deseja passar mais de um parâmetro, a declaração de rendimento se torna -
yield a, b
e o bloco é -
test {|a, b| statement}
Os parâmetros serão separados por vírgulas.
Blocos e Métodos
Você viu como um bloco e um método podem ser associados um ao outro. Normalmente, você invoca um bloco usando a instrução yield de um método que tem o mesmo nome do bloco. Portanto, você escreve -
#!/usr/bin/ruby
def test
yield
end
test{ puts "Hello world"}
Este exemplo é a maneira mais simples de implementar um bloco. Você chama o bloco de teste usando a declaração de rendimento .
Mas se o último argumento de um método for precedido por &, então você pode passar um bloco para este método e este bloco será atribuído ao último parâmetro. No caso de * e & estarem presentes na lista de argumentos, & deve vir depois.
#!/usr/bin/ruby
def test(&block)
block.call
end
test { puts "Hello World!"}
Isso produzirá o seguinte resultado -
Hello World!
Blocos BEGIN e END
Cada arquivo fonte Ruby pode declarar blocos de código a serem executados enquanto o arquivo está sendo carregado (os blocos BEGIN) e após o programa terminar de ser executado (os blocos END).
#!/usr/bin/ruby
BEGIN {
# BEGIN block code
puts "BEGIN code block"
}
END {
# END block code
puts "END code block"
}
# MAIN block code
puts "MAIN code block"
Um programa pode incluir vários blocos BEGIN e END. Os blocos BEGIN são executados na ordem em que são encontrados. Os blocos END são executados na ordem inversa. Quando executado, o programa acima produz o seguinte resultado -
BEGIN code block
MAIN code block
END code block