Eu sei que o foco principal do site é Apple, mas vou desviar um pouco e falar sobre o Ruby e sobre o Ruby on Rails. Recentemente comecei um projeto em Ruby on Rails e tive que aprender um pouco sobre a linguagem de programação Ruby e sobre seu famoso framework para web, o Ruby on Rails.
No primeiro post dessa serie vou falar um pouco sobre Blocos em Ruby, eu acredito que eles são umas das partes mais poderosa da linguagem, mas também podem ser um pouco confuso para quem vem de outras linguagens.
Um exemplo de uso de blocos é o famoso código abaixo:
3.times { puts "Ruby Rocks!" }
# => Ruby Rocks!
# => Ruby Rocks!
# => Ruby Rocks!
Um outro exemplo seria:
a = ["Ruby", "Ruby on Rails", "Apple"]
a.each { |item| puts "#{item} Rocks!" }
# => Ruby Rocks!
# => Ruby on Rails Rocks!
# => Apple Rocks!
Mas afinal, o que são os blocos?
Blocos são esses blocos de códigos que estão entres {colchetes}, e eles recebem como argumento os itens que estão entes |essas barras horizontais|. Eles não passam de um método sem nome, ou um lambda para quem programa em Lisp.
Existe outra maneira para fazer blocos com mais de uma linha que usando o comando “do” e terminando com o comando “end”. Como no exemplo abaixo:
9.downto 1 do |i|
f = fib(i)
puts f
end
Esses usos em sua maioria só servem para fazer um “for” de maneira mais simples, mas existem outras utilidades que tornam o uso de Blocos no Ruby algo quase essencial.
Quando se trabalha com arquivos, por exemplo, você pode passar um bloco à função que abre o arquivo e esse bloco recebe a instancia do arquivo aberto e executa as operações no arquivo, e assim que bloco termina de ser executado o arquivo já é fechado, não necessitando que isso seja feito.
Fazer métodos que recebem blocos é tão simples como usá-los, basta que você chame o comando yield para que o bloco seja executado, e os parâmetros passados ao yield serão os passados ao bloco.
Veja o exemplo abaixo com um implantação do método my_each para a classe Array do Ruby:
class Array
def my_each
for item in self
yield item
end
end
end
a = ["Ruby", "Ruby on Rails", "Apple"]
a.my_each { |item| puts "#{item} Rocks!" }
# => Ruby Rocks!
# => Ruby on Rails Rocks!
# => Apple Rocks!
Bom, espero que esse post possa ajudar quem tem duvidas sobre o uso de blocos em Ruby, mas de forma alguma esse é um material completo sobre o assunto. Se você quer saber mais sobre a linguagem e um texto mais detalhado sobre blocos em ruby, eu sugiro o tutorial do Eustáquio “TaQ” Rangel, que está disponível gratuitamente aqui.
No próximo post da serie vou falar sobre o plugin file_column do Ruby on Rails, que auxilia no upload de arquivos, principalmente no upload de imagens.
