fbpx
Wikipedia

Clausura (informática)

En lenguajes de programación, una clausura o cerradura[1][2]​ (del inglés closure) es una técnica para implementar ámbitos léxicos en un lenguaje de programación con funciones de primera clase. Una cerradura es un registro que contiene una función junto con el ámbito donde fue declarada. La clausura permite que la función acceda a los valores de las variables declaradas en el mismo ámbito, aun cuando la invocación ocurra fuera de este. El uso de clausuras se asocia con el paradigma de programación funcional.

Una clausura puede aparecer como una función de nivel superior, 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 asocia a una función con un conjunto de variables "privadas", que persisten en las invocaciones a la función. El ámbito de la variable abarca únicamente al ámbito donde la función fue declarada, por lo que no puede ser accedida desde otra parte del programa. No obstante, la variable mantiene su valor de forma indefinida para las siguientes invocaciones. Como consecuencia, las clausuras pueden ser usadas para simular el encapsulamiento y la ocultación de la programación orientada a objetos.

El concepto de clausura fue definido por Peter J. Landin en 1964.[3]​ Fue implementado de forma completa, por primera vez, como una característica del lenguaje de programación Scheme.[4]​ Desde entonces, otros lenguajes de programación han sido diseñados para soportar clausuras.

Ejemplos

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 creada sub 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 5 my $es_mayor_que_3 = crea_funcion_mayor_que 3; # Idem, con el valor 3 my $test = 8; # Valor a comparar if ( $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í. 

Véase también

Referencias

  1. Ernesto Cuadros-Vargas. «5.7.7 PL/Programación Funcional.». Sociedad Peruana de Computación. Consultado el 5 de octubre de 2017. 
  2. Alberto Pacheco (28 de marzo de 2007). «Programación Funcional». Instituto Tecnológico de Chihuahua. Consultado el 5 de octubre de 2017. 
  3. Turner (2012). «Some History of Functional Programming Languages» (pdf). En Loidl, Hans Wolfgang, ed. Trends in Functional Programming: Proceedings of the 13th International Symposium on Trends in Functional Programming, St Andrews, Scotland.: 1-20. 
  4. Sussman, Gerald Jay; Steele, Guy L. (Diciembre de 1975). Scheme: An Interpreter for the Extended Lambda Calculus. 
  •   Datos: Q535335

clausura, informática, este, artículo, sección, tiene, referencias, pero, necesita, más, para, complementar, verificabilidad, este, aviso, puesto, octubre, 2017, lenguajes, programación, clausura, cerradura, inglés, closure, técnica, para, implementar, ámbitos. Este articulo o seccion tiene referencias pero necesita mas para complementar su verificabilidad Este aviso fue puesto el 5 de octubre de 2017 En lenguajes de programacion una clausura o cerradura 1 2 del ingles closure es una tecnica para implementar ambitos lexicos en un lenguaje de programacion con funciones de primera clase Una cerradura es un registro que contiene una funcion junto con el ambito donde fue declarada La clausura permite que la funcion acceda a los valores de las variables declaradas en el mismo ambito aun cuando la invocacion ocurra fuera de este El uso de clausuras se asocia con el paradigma de programacion funcional Una clausura puede aparecer como una funcion de nivel superior cuando una funcion esta definida dentro de otra funcion y la funcion interna se refiere a las variables locales de la funcion externa En tiempo de ejecucion cuando se ejecuta la funcion externa se forma una clausura que consta del codigo de la funcion interna y las referencias a todas las variables de la funcion externa que son requeridas por la clausura Una clausura asocia a una funcion con un conjunto de variables privadas que persisten en las invocaciones a la funcion El ambito de la variable abarca unicamente al ambito donde la funcion fue declarada por lo que no puede ser accedida desde otra parte del programa No obstante la variable mantiene su valor de forma indefinida para las siguientes invocaciones Como consecuencia las clausuras pueden ser usadas para simular el encapsulamiento y la ocultacion de la programacion orientada a objetos El concepto de clausura fue definido por Peter J Landin en 1964 3 Fue implementado de forma completa por primera vez como una caracteristica del lenguaje de programacion Scheme 4 Desde entonces otros lenguajes de programacion han sido disenados para soportar clausuras Ejemplos EditarUsando el lenguaje Perl usr bin perl w Aqui tenemos una funcion que crea otra que nos servira para saber si el argumento que le pasamos es superior o no al del valor de referencia con el que fue creada sub crea funcion mayor que my limite shift Valor con el que se creara la funcion La variable limite es local a la funcion crea funcion mayor que return Devolvemos sub una funcion return que nos devuelve 0 gt limite verdadero si su primer argumento supera nuestro limite A partir de este punto limite deberia desaparecer pero no lo hace porque sigue siendo referenciada por la nueva funcion que acabamos de crear my es mayor que 5 crea funcion mayor que 5 Creamos una funcion que comparara con el valor 5 my es mayor que 3 crea funcion mayor que 3 Idem con el valor 3 my test 8 Valor a comparar if es mayor que 5 gt test Ver si test es mayor que 5 print test es mayor que 5 n else print test no es mayor que 5 n Aqui se podria utilizar la funcion es mayor que 3 de la misma manera Las dos variables limite de las dos funciones creadas son completamente independientes entre si Vease tambien EditarExpresion lambdaReferencias Editar Ernesto Cuadros Vargas 5 7 7 PL Programacion Funcional Sociedad Peruana de Computacion Consultado el 5 de octubre de 2017 Alberto Pacheco 28 de marzo de 2007 Programacion Funcional Instituto Tecnologico de Chihuahua Consultado el 5 de octubre de 2017 Turner 2012 Some History of Functional Programming Languages pdf En Loidl Hans Wolfgang ed Trends in Functional Programming Proceedings of the 13th International Symposium on Trends in Functional Programming St Andrews Scotland 1 20 Sussman Gerald Jay Steele Guy L Diciembre de 1975 Scheme An Interpreter for the Extended Lambda Calculus Datos Q535335 Obtenido de https es wikipedia org w index php title Clausura informatica amp oldid 138855198, wikipedia, wiki, leyendo, leer, libro, biblioteca,

español

, española, descargar, gratis, descargar gratis, mp3, video, mp4, 3gp, jpg, jpeg, gif, png, imagen, música, canción, película, libro, juego, juegos