Afinal, o que são Closures?

AGRADEÇA AO AUTOR COMPARTILHE!

Olá pessoas!

Sabem aqueles conceitos, que a gente sempre utiliza e chega alguém com um nome “pomposo” para a parada (que você nunca ouviu falar)? Isso aconteceu comigo com closures.

What (the hell) are closures?

Entendi o conceito de closures enquanto estudava Ruby. Na verdade, fica a dica… se você quer aprender Orientação a Objetos, aprenda linguagens dinâmicas como Ruby, Python e até mesmo PHP. Depois parta para linguagens mais “hardcore” como Java e C++.

Vamos deixar a Wikipedia nos explicar o que é uma closure:

Uma closure ocorre normalmente quando uma função é declarada dentro do corpo de outra, e a função interior referencia variáveis locais da função exterior. Em tempo de execução, quando a função exterior é executada, então uma closure é formada, que consiste do código da função interior e referências para quaisquer variáveis no escopo da função exterior que a closure necessita.

Ok… sou a favor das pessoas que dizem que é difícil compreender alguns conceitos apenas por parágrafos formados por palavras bem escritas.  Vamos ao exemplo:

Temos uma função definida dentro de outra função. A função interna utiliza de parâmetros e variáveis da função externa…  basicamente, este é o conceito de closure.

Não achou muito útil? Dê uma olhada no exemplo abaixo:

Utilizamos o conceito de closure no exemplo acima. Abusamos do contexto da linguagem, onde, mesmo que estejamos “chamando” a função fora do escopo de FabricaDeUsuarios, na verdade novoUsuario trata-se de uma referência a função criaUsuario. Logo, ainda estaremos utilizando os recursos do contexto de FabricaDeUsuarios.

Referências

E você… tem algum exemplo bacana sobre closures? Não deixe de comentar.

Fonte: Blog Klaus Laube

AGRADEÇA AO AUTOR COMPARTILHE!

Klaus Peter Laube

Mais artigos deste autor »

Tecnólogo em Análise e Desenvolvimento de Sistemas pelo Centro Universitário de Jaraguá do Sul (UNERJ). Desenvolvedor Web de longa data, apaixonado por Python e defensor dos padrões Web. Escreve quando pode no http://www.klauslaube.com.br.


2 Comentários

Deixe seu comentário

Seu endereço de e-mail não será publicado. Campos com * são obrigatórios!

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">