Sie sind auf Seite 1von 4

Universidad Nacional San Luis Gonzaga de Ica

Facultad de Ingeniera Mecnica y Elctrica

Librera <Functional>
Provee varios objetos funcionales, diseados para ser utilizados por los algoritmos estndares.

Objetos

Funcionales

Un objeto de funcin es una programacin de ordenador que permite la construccin de un objeto que se invoca o llama como si se tratara de una funcin ordinaria, por lo general con la misma sintaxis (un parmetro de funcin que tambin puede ser una funcin).

Descripcin
Un uso tpico de un objeto de funcin se presenta por escrito de devolucin de llamada funciones. Una devolucin de llamada en lenguas de procedimiento , tales como C , se puede realizar mediante el uso de punteros a funciones . [ 2 ] Sin embargo, puede ser difcil o incmodo para pasar un estado dentro o fuera de la funcin de devolucin de llamada. Esta restriccin tambin se inhibe el comportamiento ms dinmico de la funcin. Un objeto de funcin resuelve esos problemas ya que la funcin es en realidad una fachada para un objeto completo, llevando su propio estado. Muchos modernos (y algunos ms) idiomas, por ejemplo, C + + , Groovy , Lisp , Perl , PHP , Python , Rub , Scala , y muchos otros, el apoyo de primera clase de funciones objetos e incluso puede hacer un uso significativo de ellos. [ 3 ] La programacin funcionalidiomas adems apoyar el cierre , es decir, funciones de primera clase que puede "cerrarse sobre 'las variables de entorno que las rodea durante la creacin. Durante la compilacin, una transformacin conocida como lifting lambda convierte los cierres en objetos funcionales.

Universidad Nacional San Luis Gonzaga de Ica


Facultad de Ingeniera Mecnica y Elctrica

Ejemplo:
Consideremos el ejemplo de una rutina de clasificacin que utiliza una funcin de devolucin de llamada para definir una relacin de orden entre un par de artculos. Un programa en C usando punteros de funcin puede aparecer como:
# Include <stdlib.h> / * Funcin de devolucin de llamada * / int compareInts ( void * a , void * b ) { vuelta * ( ( int * ) ( a ) ) < * ( ( int * ) ( b ) ) ; } ... / * Declaracin de clasificacin C funcin * / void ordenar ( void * firstItem , size_t ItemSize , void * LastItem , int ( * cmpfunc ) ( void *, void * ) ) ; ... int main(void) { int items[] = {4, 3, 1, 2}; sort((void *)(items), sizeof(int), (void *)(items + 3), compareInts); return 0; }

En C++ un objeto de funcin puede ser utilizada en lugar de una funcin ordinaria mediante la definicin de una clase que sobrecarga el operador de una llamada funcin mediante la definicin de una operador ( ) la funcin miembro. En C++ esto se llama un funtor, y puede aparecer como sigue:

struct compareClass { bool operador ( ) ( int a, int b ) const { regresar a < b ; } } ; ... / / Declaracin de C + + de clasificacin. template < clase ComparisonFunctor > void sortInts ( int * beginItems, int numItems, ComparisonFunctor c ) ;

Universidad Nacional San Luis Gonzaga de Ica


Facultad de Ingeniera Mecnica y Elctrica
... int principal ( ) { int artculos [ ] = { 4 , 3 , 1 , 2 } ; sortInts ( artculos, sizeof ( artculos ) / sizeof ( artculos [ 0 ] ) , compareClass ( ) ) ; }

Observe que la sintaxis para ofrecer la devolucin de llamada a los sortInts () funcin es idntica, pero se pasa un objeto en lugar de un puntero a funcin. Cuando se invoca la funcin de devolucin de llamada se ejecuta como cualquier otra funcin miembro, por lo que tiene acceso completo a los dems miembros (datos o funciones) del objeto. Es posible usar los objetos de funcin en otras situaciones que como funciones de devolucin de llamada (aunque el trmino abreviado funtor normalmente no se utiliza). Continuando con el ejemplo:
Y compareClass ; bool resultado = S ( a, b ) ;

Adems de funtores tipo de clase, otros tipos de objetos de funcin tambin son posibles en C + +. Ellos pueden tomar ventaja de C + + 's puntero miembros o plantilla de las instalaciones. La expresiva de plantillas permite que algunas tcnicas funcionales de programacin a utilizar, tales como la definicin de objetos de funcin en trminos de objetos de funcin (como la composicin de la funcin). Gran parte de la C + + Biblioteca de plantillas estndar (STL) hace un uso intensivo de los objetos funcionales basados en plantillas. C + 11 permite definir la funcin annimos objetos. La lnea del ejemplo anterior se puede escribir como sigue:
sortInts ( artculos, sizeof ( artculos ) / sizeof ( artculos [ 0 ] ) , [ ] ( int a, int b ) { vuelta a < b ; });

Universidad Nacional San Luis Gonzaga de Ica


Facultad de Ingeniera Mecnica y Elctrica
El mantenimiento de Estado

Otra de las ventajas de los objetos de funcin es su capacidad de mantener un estado que afecta operador () entre las llamadas. Por ejemplo, el siguiente cdigo define un generador a contar desde 10 hacia arriba y se invoca 11 veces
# Include # include <iterator> # include <algorithm> clase CountForm { privado : int y recuento ; pblico : CountForm ( int + n ) : Nmero ( n ) { } int operador ( ) ( ) { retorno conteo + + ; } ;

int principal ( ) { int Estado ( 10 ) ; std :: generate_n ( std :: ostream_iterator < int > ( std :: cout , " \ n " ) , 11 , CountForm ( estado ) ) ; retorno 0 ; }

Das könnte Ihnen auch gefallen