Funktionellt objekt

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 7 oktober 2020; kontroller kräver 4 redigeringar .

Ett funktionsobjekt ( eng.  function object ), även functor , functional och funktsionoid  - en vanlig konstruktion inom programmering som låter dig använda ett objekt som funktion . Används ofta som återuppringning , delegering .

En representationsfunktion är en  funktion som beskriver en mappning mellan ett matematiskt koncept ( mängd , funktion ) och dess implementering i ett programmeringsspråk (respektive mängd , funktion ) [1] .

C++

I C++ skapas ett funktionsobjekt med en klass som har operator() överbelastad :

class compare_class { offentliga : bool operator ()( int A , int B ) { return ( A < B ); } }; // sorteringsfunktionsdeklarationsmall < class ComparisonFunctor > void sort_ints ( int * begin_items , int num_items , ComparisonFunctor c ) ; int main () { int objekt [] = { 4 , 3 , 1 , 2 }; compare_class functor ; sort_ints ( objekt , storlek på ( objekt ) / storlek på ( int ), funktor ); }

JavaScript

I JavaScript är en funktion ett objekt:

const acc = funktion ( lägg till ) { acc . värde += addera ; }; enl . värde = 0 ; acc ( 2 ); konsol . log ( tilll . värde ); // 2 acc ( 6 ); konsol . log ( tilll . värde ); // åtta

C# och VB.NET

C # och VB.NET använder delegater för att programmera funktioner .

Java

Eftersom funktioner inte är förstklassiga objekt i Java , är en funktor ett objekt som implementerar ett gränssnitt , ofta som en icke namngiven kapslad klass :

List < String > list = Arrayer . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); samlingar . sort ( list , new Comparator < String > () { public int compare ( String o1 , String o2 ) { return Integer . valueOf ( o1 ). compareTo ( Integer . valueOf ( o2 )); } });

eller lambda-uttryck :

List < String > list = Arrayer . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); samlingar . sort ( list , ( String o1 , String o2 ) -> Integer . valueOf ( o1 ). compareTo ( Integer . valueOf ( o2 ) ) );

Haskell

I Haskell är en funktor en typklass som deklarerar en enda "fmap"-metod. Intuitivt tillämpar "fmap" funktionen a -> b på ett värde av typen fa för att få ett värde av typen fb . Å andra sidan kan man tänka på "fmap" som en högre ordningsfunktion som omvandlar en "enkel" funktion a -> b till en "sammansatt" funktion fa -> fb . Det är viktigt att notera att strukturen för ett värde av typ f efter applicering av "fmap" måste förbli oförändrad.

klass Funktion f där fmap :: ( a -> b ) -> f a -> f b

Triviala användningsfall:

plusEtt = ( + 1 ) nummerlista = [ 1 , 2 , 3 , 4 , 5 ] newNumberList = fmap plusOne numberList -- newNumberList == [2, 3, 4, 5, 6] kvadrat :: Int -> Int kvadrat = ( ^ 2 ) -- | "Set"-datatypen kräver "Data.Set"-bibliotek. squareAllSetElements :: Set Int -> Set Int squareAllSetElements = fmap square

En funktion kan definieras för nästan vilken parametriskt polymorf typ som helst .

PHP

PHP har en magisk metod __invokesom kallas när ett skript försöker köra ett objekt som en funktion:

class Functor { public function __invoke ( int $a , int $b ) : bool { return $a < $b ; } } $arr = [ 1 , 5 , 2 , 8 , 9 , 0 , 3 ]; usort ( $arr , new Functor ());

ML

I ML- dialekter ( Standard ML , Alice , OCaml ) är en funktor en funktion över moduler, det vill säga en mappning från moduler till moduler .

Anteckningar

  1. ^ Explanatory Dictionary of Computing Systems, 1990 .

Länkar