domingo, 27 de outubro de 2013

Exercitando com Ruby Parte 8 (Blocos (Lambda, Proc, Yield))

Depois de muito tempo resolvi voltar aqui, e mostrar algumas técnicas que são usadas em blocos, que realmente facilitam a vida do programador, vejamos algumas:

Yield
É usado para fazer uma passagem de bloco para um método (isso mesmo que você leu), usando "yield" dentro do método. Então lembrando quando usado o Yield, a chamada do método deve ser acompanhada de um bloco com as instruções.
  1. Um exemplo básico:
    def metodo
     yield
    end
    metodo {puts "diga olá"}
    => diga olá
  2. Várias chamadas:
    def metodo
       puts "você por aqui?"
       yield 
       puts "de novo aqui?"
       yield
    end
    metodo {puts "sim"}
    => você por aqui?
    => sim
    => de novo aqui?
    => sim
    
  3. Bloco com passagem de parâmetro:
    def metodo(val)
     yield(val)
    end
    metodo(4) {|val| puts "#{val}"}
    => 4
  4. Yield com condicional (Note que a segunda chamada não é efetuado pelo fato de não existir um bloco de código na chamada do método, pelo fato de usar um valor condicional "if block_given?"):
    def metodo(valor)
     yield(valor) if block_given?
    end
    metodo(10) {|val| puts val*val}
    metodo(20)
    => 100
    => 
Lambda
Bloco de código associado à uma variável. O método Lambda está presente no módulo Kernel do Ruby, portanto não precisa instanciar quando chama-lo.
  1. Chamada com um argumento (Para fazer a chamada use a função "call"):
    lambda = -> (v1) { 10 * v1}
    p lambda.call(10)
    =>100
  2. Chamada com um ou dois argumentos:
    lambda = ->(a,b=6){ a * b } 
    p lambda.call(2)
    p lambda.call('$')
    p lambda.call(10,10)
    =>12
    =>$$$$$$
    =>100
Proc
Também é um bloco de código associado à uma variável, similar ao Lambda, onde sua chamada é feita com instância.
  1. Exemplo prático:
    variavel = Proc.new {|valor| valor*3}
    p variavel.call(2)
    =>6

Darlan Dieterich

Nenhum comentário:

Postar um comentário

Deixe aqui seu comentário