Funkcionális objektum

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. október 7-én felülvizsgált verziótól ; az ellenőrzések 4 szerkesztést igényelnek .

Funkcióobjektum ( eng.  function object ), funktor , funkcionális és funktsionoid is  – egy gyakori konstrukció a programozásban , amely lehetővé teszi egy objektum funkcióként történő használatát . Gyakran használják visszahívásként , delegáltként .

A reprezentációs funktor egy olyan  függvény , amely egy matematikai fogalom ( halmaz , függvény ) és annak programnyelvi megvalósítása (illetve halmaz , függvény ) közötti leképezést írja le [1] .

C++

A C++ nyelvben egy függvényobjektum egy olyan osztály használatával jön létre, amely túlterhelt operátort () tartalmaz :

osztály összehasonlítás_osztály { nyilvános : bool operátor ()( int A , int B ) { vissza ( A < B ); } }; // rendezési függvény deklarációs sablon < class ComparisonFunctor > void sort_ints ( int * begin_items , int num_items , ComparisonFunctor c ); int main () { int tételek [] = { 4 , 3 , 1 , 2 }; osztály összehasonlítási függvénye ; sort_ints ( items , sizeof ( items ) / sizeof ( int ), functor ); }

JavaScript

A JavaScriptben a függvény egy objektum:

const acc = function ( add ) { acc . érték += hozzáadás ; }; acc . érték = 0 ; acc ( 2 ); konzol . log ( acc . value ); 2 acc ( 6 ); konzol . log ( acc . value ); // nyolc

C# és VB.NET

A C # és a VB.NET delegátusokat használ a programfunkciókhoz .

Java

Mivel a függvények nem első osztályú objektumok a Java -ban , a funktor egy olyan objektum, amely interfészt valósít meg , gyakran névtelen beágyazott osztályként :

Lista < Karakterlánc > list = Tömbök . asList ( " 10 " , " 1 " , " 20 " , " 11 " , " 21 " , " 12 " ); gyűjtemények . sort ( lista , új Összehasonlító < String > () { public int összehasonlítás ( String o1 , String o2 ) { return Integer . valueOf ( o1 ). ÖsszehasonlítTo ( Integer . valueOf ( o2 )); } });

vagy lambda kifejezések :

Lista < Karakterlánc > list = Tömbök . asList ( " 10 " , " 1 " , " 20 " , " 11 " , " 21 " , " 12 " ); gyűjtemények . sort ( lista , ( String o1 , String o2 ) -> Integer . valueOf ( o1 ). Összehasonlít To ( Integer . valueOf ( o2 ) ) );

Haskell

A Haskellben a funktor egy típusosztály, amely egyetlen "fmap" metódust deklarál. Intuitív módon az "fmap" az a -> b függvényt fa típusú értékre alkalmazza, hogy fb típusú értéket kapjon . Másrészt az "fmap" egy magasabb rendű függvénynek tekinthető , amely az "egyszerű" a -> b függvényt "összetett" fa -> fb függvényté alakítja . Fontos megjegyezni, hogy az f típusú érték szerkezetének az "fmap" alkalmazása után változatlannak kell maradnia.

osztály Funktor f ahol fmap :: ( a -> b ) -> f a -> f b

Triviális használati esetek:

pluszegy = ( +1 ) _ numberList = [ 1 , 2 , 3 , 4 , 5 ] newNumberList = fmap plusOne numberList -- newNumberList == [2, 3, 4, 5, 6] négyzet :: Int -> Int négyzet = ( ^ 2 ) -- | A „Set” adattípushoz „Data.Set” könyvtár szükséges. squareAllSetElements :: Int beállítása -> Int beállítása squareAllSetElements = fmap square

Funktor definiálható szinte bármilyen parametrikusan polimorf típushoz .

PHP

A PHP -nek van egy varázslatos metódusa __invoke, amely akkor hívódik meg, amikor egy szkript függvényként próbál végrehajtani egy objektumot:

class Funktor { public function __invoke ( int $a , int $b ) : bool { return $a < $b ; } } $arr = [ 1 , 5 , 2 , 8 , 9 , 0 , 3 ]; usort ( $arr , új függvény ());

ML

Az ML dialektusokban ( Standard ML , Alice , OCaml ) a funktor egy modulok feletti függvény, azaz egy modulról modulra való leképezés .

Jegyzetek

  1. Számítástechnikai rendszerek magyarázó szótára, 1990 .

Linkek