Métodos auto-redefiníveis

October 11th, 2004 § 2 comments

Enquanto eu fuçava com o Ruby, lendo documentação e os excertos grátis do livro Programming Ruby, eu me deparei com um exemplo que só linguagens sofisticadas conseguem ter:

class Test
  def doSomething
    def doSomething
      @calculatedValue
    end
    @calculatedValue = self.runLongCalculation
  end
end

Essa técnica, útil em vários contextos, permite que um método redefina a si mesmo. No caso acima, na primeira vez em que o método é invocado, a última linha é executada e o valor do cálculo é retornado. Da segunda vez em que é chamado, somente o valor já calculado é retornado.

Esse é um exemplo simples, e o livro dá um bem mais sofisticado, mas isso já mostra como o Ruby permite que o programador expresse exatamente o que ele quer fazer.

§ 2 Responses to Métodos auto-redefiníveis"

  • Jonas Galvez says:

    *cough* Versão em Python *cough*:

    class Test:
        def doSomething(self):
            def doSomething():
                return self.calculatedValue
            self.calculatedValue = self.runLongCalculation()
            self.doSomething = doSomething
            return self.calculatedValue

    Sim, a versão em Ruby é moderadamente mais limpa :)

  • Ronaldo says:

    Eu sabia que não ia demorar muito para isso acontecer. 😀

    Na verdade, o que eu achei mais interessante no exemplo do livro é que o autor definiu um método que recebe outro método como parâmetro e transforma aquele método em algo é invocado diretamente uma só vez. Para a clareza do Ruby, o exemplo é até bem hermético. O açúcar sintático final é que fica interessante.

    Do que eu estou vendo, e como você disse em seu blog, o Python e o Ruby são bem parecidos na maioria das áreas. Mas as diferenças também são bem fortes em outros (pelo fato do Ruby ser bem mais OO que o Python) e o Ruby tem algumas coisas que seriam difíceis de replicar no Python com a mesma clareza e facilidade (e basicamente, porque a sintaxe do Ruby foi projetada para isso, não porque o Python não seja dinâmico o suficiente).

    No final das contas, é o que eu sempre digo: cada linguagem a mais é um presente. 😛

What's this?

You are currently reading Métodos auto-redefiníveis at Superfície Reflexiva.

meta