-
1
English · JMdictclosure
-
2
Español · Wikipedia
En Informática, una clausura es una función evaluada en un entorno que contiene una o más variables dependientes de otro entorno. Cuando es llamada, la función puede acceder a estas variables. El uso explícito de clausuras se asocia con la programación funcional y con lenguajes como ML y Lisp. Construcciones como los objetos en otros lenguajes pueden también modelarse con clausuras. En algunos lenguajes, una clausura puede aparecer cuando una función está definida dentro de otra función, y la función interna se refiere a las variables locales de la función externa. En tiempo de ejecución, cuando se ejecuta la función externa, se forma una clausura, que consta del código de la función interna y las referencias a todas las variables de la función externa que son requeridas por la clausura. Una clausura puede usarse para asociar una función con un conjunto de variables "privadas", que persisten en las invocaciones a la función. El ámbito de la variable abarca sólo al de la función definida en la clausura, por lo que no puede ser accedida por otro código del programa. No obstante, la variable mantiene su valor de forma indefinida, por lo que un valor establecido en una invocación permanece disponible para la siguiente. Como consecuencia, las clausuras pueden ser usadas para esconder estados e implementar programación orientada a objetos. El concepto de clausura fue desarrollado en los años 60 e implementado de forma completa, por primera vez, como una característica más del lenguaje de programación Scheme. Desde entonces, muchos otros lenguajes han sido diseñados para soportar clausuras. Un ejemplo usando el lenguaje Perl #!/usr/bin/perl -w# Aquí tenemos una función que crea otra, que nos servirá para saber si el argumento que le pasamos# es superior o no al del valor de referencia con el que fue creadasub crea_funcion_mayor_que ($) { my $limite = shift; # Valor con el que se creará la función # La variable $limite es local a la función crea_funcion_mayor_que() return # Devolvemos sub { # una función return # que nos devuelve $_[0] > $limite; # verdadero si su primer argumento supera nuestro $limite. }; # A partir de este punto $limite debería desaparecer, # pero no lo hace, porque sigue siendo referenciada # por la nueva función que acabamos de crear}my $es_mayor_que_5 = crea_funcion_mayor_que 5; # Creamos una función que comparará con el valor 5my $es_mayor_que_3 = crea_funcion_mayor_que 3; # Idem, con el valor 3my $test = 8; # Valor a compararif ( $es_mayor_que_5->($test) ) { # Ver si $test $es_mayor_que_5 print "$test es mayor que 5 \n";}else { print "$test no es mayor que 5 \n";}# Aquí se podría utilizar la función $es_mayor_que_3 de la misma manera. Las dos variables# $limite de las dos funciones creadas son completamente independientes entre sí.
Leer el artículo completo en Wikipedia · CC-BY-SA
-
3
English · Wikipedia
In programming languages, closures (also lexical closures or function closures) are techniques for implementing lexically scoped name binding in languages with first-class functions. Operationally, a closure is a record storing a function together with an environment: a mapping associating each free variable of the function (variables that are used locally, but defined in an enclosing scope) with the value or reference to which the name was bound when the closure was created. A closure—unlike a plain function—allows the function to access those captured variables through the closure's copies of their values or references, even when the function is invoked outside their scope. Example. The following program fragment defines a higher-order function startAt with a parameter x and a nested function incrementBy. The nested function incrementBy has access to x, because incrementBy is in the lexical scope of x, even though x is not local to incrementBy. The function startAt returns a closure containing a copy of the value of x or a copy of the reference to x from this invocation of startAt, and the function incrementBy, which adds the value of y to the value of x: function startAt(x) function incrementBy(y) return x + y return incrementByvariable closure1 = startAt(1)variable closure2 = startAt(5) Note that, as startAt returns a function, the variables closure1 and closure2 are of function type. Invoking closure1(3) will return 4, while invoking closure2(3) will return 8. While closure1 and closure2 refer to the same function incrementBy, the associated environments differ, and invoking the closures will bind the name x to two distinct variables with different values in the two invocations, thus evaluating the function to different results.
Leer el artículo completo en Wikipedia · CC-BY-SA
n.º 218.781
Significado
Guarda esta palabra para empezar a repasarla con repetición espaciada.
Guardar palabra