Un objeto de función ( eng. objeto de función ), también functor , funcional y funktsionoid : una construcción común en programación que le permite usar un objeto como una función . A menudo se utiliza como devolución de llamada , delegado .
Un funtor de representación es un funtor que describe un mapeo entre un concepto matemático ( conjunto , función ) y su implementación en un lenguaje de programación (respectivamente, conjunto , función ) [1] .
En C++ , un objeto de función se crea usando una clase que tiene operator() sobrecargado :
clase comparar_clase { público : operador booleano ()( int A , int B ) { retorno ( A < B ); } }; // plantilla de declaración de función de clasificación < class ComparisonFunctor > void sort_ints ( int * begin_items , int num_items , ComparisonFunctor c ); int principal () { elementos int [] = { 4 , 3 , 1 , 2 }; funtor compare_class ; sort_ints ( elementos , tamaño de ( elementos ) / tamaño de ( int ), funtor ); }En JavaScript , una función es un objeto:
const acc = función ( suma ) { acc . valor += sumar ; }; según _ valor = 0 ; acc ( 2 ); consola _ log ( ac . valor ); // 2 acc ( 6 ); consola _ log ( ac . valor ); // ochoC # y VB.NET usan delegados para programar funtores .
Debido a que las funciones no son objetos de primera clase en Java , un funtor es un objeto que implementa una interfaz , a menudo como una clase anidada sin nombre :
Lista < Cadena > lista = Matrices . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); colecciones _ sort ( list , new Comparator < String > () { public int compare ( String o1 , String o2 ) { return Integer . valueOf ( o1 ). compareTo ( Integer . valueOf ( o2 )); } }); Lista < Cadena > lista = Matrices . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); colecciones _ ordenar ( lista , ( String o1 , String o2 ) -> Integer . valueOf ( o1 ). compareTo ( Integer . valueOf ( o2 ) ) );En Haskell , un funtor es una clase de tipo que declara un solo método "fmap". Intuitivamente, "fmap" aplica la función a -> b a un valor de tipo fa para obtener un valor de tipo fb . Por otro lado, uno puede pensar en "fmap" como una función de orden superior que transforma una función "simple" a -> b en una función "compuesta" fa -> fb . Es importante señalar que la estructura de un valor de tipo f después de aplicar "fmap" debe permanecer sin cambios.
clase Funtor f donde fmap :: ( a -> b ) -> f a -> f bCasos de uso triviales:
másUno = ( + 1 ) lista de numeros = [ 1 , 2 , 3 , 4 , 5 ] newNumberList = fmap plusOne numberList -- nuevaListaNúmeros == [2, 3, 4, 5, 6] cuadrado :: Int -> Int cuadrado = ( ^ 2 ) -- | El tipo de datos 'Set' requiere la biblioteca "Data.Set". squareAllSetElements :: Establecer Int -> Establecer Int squareAllSetElements = fmap cuadradoSe puede definir un funtor para casi cualquier tipo paramétricamente polimórfico .
PHP tiene un método mágico __invokeque se llama cuando un script intenta ejecutar un objeto como una función:
class Functor { public function __invoke ( int $a , int $b ) : bool { return $a < $b ; } } $matriz = [ 1 , 5 , 2 , 8 , 9 , 0 , 3 ]; usort ( $ matriz , nuevo Funtor ());En los dialectos de ML ( Standard ML , Alice , OCaml ), un funtor es una función sobre módulos, es decir, una asignación de módulos a módulos .