Clausura (informàtica)
En llenguages de programació, una clausura o pany[1][2] (de l'anglés closure) és una tècnica per a implementar àmbits lèxics en un llenguage de programació en funcions de primera classe. Un pany és un registre que conté una funció junt en l'àmbit a on va ser declarada. La clausura permet que la funció accedixca als valors de les variables declarades en el mateix àmbit, aun cuando l'invocació ocórrega fora d'est. L'us de clausura s'associa en el paradigma de programació funcional.
Una clausura pot aparéixer com una funció de nivell superior, quan una funció està definida dins d'una atra funció, i la funció interna es referix a les variables locals de la funció externa. En temps d'eixecució, quan s'eixecuta la funció externa, es forma una clausura, que consta del còdic de la funció interna i les referències a totes les variables de la funció externa que són requerides per la clausura.
Una clausura associa a una funció en un conjunt de variables "privades", que persistixen en les invocacions a la funció. L'àmbit de la variable comprén únicament a l'àmbit a on la funció va ser declarada, per lo que no pot ser accedida des d'una atra part del programa. No obstant, la variable manté el seu valor de forma indefinida per a les següents invocacions. Com a conseqüència, les clausura poden ser usades per a simular l'encapsulamiento i l'ocultació de la programació orientada a objectes.
El concepte de clausura va ser definit per Peter J. Landin en 1964.[3] Va ser implementat de forma completa, per primera volta, com una característica del llenguage de programació Scheme.[4] Des de llavors, atres llenguages de programació han segut dissenyats per a soportar clausura.
Eixemples
[editar | editar còdic]Usant el llenguage Perl:
#!/usr/bin/perl -w
# Ací tenim una funció que crea una atra, que nos servirà per a saber si l'argument que li passem
# és superior o no al del valor de referència en el que va ser creada
sub crea_funcion_major_que ($) {
my $llimite = shift; # Valor en el que es crearà la funció
# La variable $llimite és local a la funció crea_funcion_major_que()
return # Tornem
sub { # una funció
return # que nos torna
$_[0] > $llimite; # verdader si el seu primer argument supera el nostre $llimite.
};
# A partir d'este punt $llimite deuria desaparéixer,
# pero no ho fa, perque seguix sent referenciada
# per la nova funció que acabem de crear
}
my $és_major_que_5 = crea_funcion_major_que 5; # Creem una funció que compararà en el valor 5
my $és_major_que_3 = crea_funcion_major_que 3; # Idem, en el valor 3
my $test = 8; # Valor a comparar
if ( $és_major_que_5->($test) ) { # Vore si $test $és_major_que_5
print "$test és major que 5
";
}
else {
print "$test no és major que 5
";
}
# Ací es podria utilisar la funció $és_major_que_3 de la mateixa manera. Les dos variables
# $llimite de les dos funcions creades són completament independents entre sí.Vore també
[editar | editar còdic]Referències
[editar | editar còdic]- ↑ Ernesto Quadros-Vargas. «5.7.7 PL/Programació Funcional.». Societat Peruana de Computació. Consultat el 5 d'octubre de 2017.
- ↑ Alberto Pacheco. «Programació Funcional». Institut Tecnològic de Chihuahua. Consultat el 5 d'octubre de 2017.
- ↑ (2012).Trends in Functional Programming: Proceedings of the 13th International Symposium on Trends in Functional Programming, St Andrews, Scotland..
- 1-20.
- ↑
Referències
[editar | editar còdic]
- Este artícul conté una traducció derivada de «Clausura (informática)» de Wikipedia en castellà publicada baix la Llicència de documentació lliure de GNU i la Llicència Creative Commons Reconeiximent-CompartirIgual 4.0 Internacional.