Clausura (ciência da computação)
Da Wikipédia, a enciclopédia livre
Remove ads
Da Wikipédia, a enciclopédia livre
Em ciência da computação e na programação uma clausura (do inglês closure) é uma função que referencia variáveis livres no contexto léxico. Uma clausura 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 clausura é formada, que consiste do código da função interior e referências para quaisquer variáveis no âmbito da função exterior que a clausura necessita.
Este artigo não cita fontes confiáveis. (Junho de 2011) |
As clausuras são utilizadas para:
def new_counter
i = 0
lambda { i += 1 }
end
c1 = new_counter
puts c1.call
puts c1.call
puts c1.call
puts c1.call
puts c1.call
(defun foo ()
(let ((counter 0))
;; a função anônima a seguir é definida no escopo de counter,
;; por isso foo retornará uma clausura
(lambda ()
(setf counter (+ 1 counter))
counter)))
(setf counter-1 (foo))
(setf counter-2 (foo))
(funcall counter-1) ==> 1
(funcall counter-1) ==> 2
(funcall counter-2) ==> 1
function novoContador () {
var i = 0;
return function () { // função anônima
i += 1;
return i;
}
}
c1 = novoContador();
alert(c1()); // 1
alert(c1()); // 2
alert(c1()); // 3
alert(c1()); // 4
alert(c1()); // 5
function newCounter() {
$i=0;
return function() use (&$i) {
return ++$i;
};
}
$countMe = newCounter();
print($countMe());
print($countMe());
print($countMe());
print($countMe());
>>> def foo(start=0):
... counter = [start] # counter is 1-element array
... def bar():
... counter[0] = counter[0] + 1
... return counter[0]
... return bar
...
>>> count = foo(10)
>>> count()
11
>>> count()
12
(define (foo)
(let ((counter 0))
(lambda ()
(set! counter (+ 1 counter))
counter)))
(define counter-1 (foo))
(define counter-2 (foo))
(counter-1) ==> 1
(counter-1) ==> 2
(counter-1) ==> 3
(counter-2) ==> 1
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.