Funktioobjekti ( eng. function object ), myös funktionaali , funktionaalinen ja funktsionoid - ohjelmoinnissa yleinen rakenne, jonka avulla objektia voidaan käyttää funktiona . Käytetään usein takaisinsoittona , edustajana .
Esitysfunktiontori on funktionaali , joka kuvaa matemaattisen käsitteen ( joukko , funktio ) ja sen ohjelmointikielellä toteutuksen (vastaavasti joukko , funktio ) välisen kuvauksen [1] .
C++ : ssa funktioobjekti luodaan käyttämällä luokkaa, jossa operaattori() on ylikuormitettu :
luokka vertaa_luokka { julkinen : bool - operaattori ()( int A , int B ) { paluu ( A < B ); } }; // lajittele funktion määritysmalli < luokka ComparisonFunctor > void sort_ints ( int * aloituskohteet , int num_items , ComparisonFunctor c ); int main () { int erät [] = { 4 , 3 , 1 , 2 }; vertaa_luokka- funktiota ; sort_ints ( items , sizeof ( items ) / sizeof ( int ), functor ); }JavaScriptissä funktio on objekti:
const acc = funktio ( lisää ) { acc . arvo += lisää ; }; acc . arvo = 0 ; acc ( 2 ); konsoli . log ( acc . value ); // 2 acc ( 6 ); konsoli . log ( acc . value ); // kahdeksanC # ja VB.NET käyttävät delegaatteja ohjelmoimaan toimijoita .
Koska funktiot eivät ole Javassa ensiluokkaisia objekteja , funktionaali on objekti, joka toteuttaa käyttöliittymän , usein nimettömänä sisäkkäisenä luokkana :
List < String > list = Arrays . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); kokoelmat . sort ( lista , new Comparator < String > () { public int vertaa ( String o1 , String o2 ) { return Integer . valueOf ( o1 ). vertaaTo ( Integer . valueOf ( o2 )); } });tai lambda-lausekkeet :
List < String > list = Arrays . asList ( "10" , "1" , "20" , "11" , "21" , "12" ); kokoelmat . sort ( lista , ( Merkkijono o1 , Merkkijono o2 ) -> Kokonaisluku . arvoOf ( o1 ). vertaaTo ( Integer . valueOf ( o2 ) ) );Haskellissa funktionaali on tyyppiluokka , joka ilmoittaa yhden "fmap"-menetelmän. Intuitiivisesti "fmap" käyttää funktiota a -> b tyypin fa arvoon saadakseen tyypin fb arvon . Toisaalta "fmap" voidaan ajatella korkeamman asteen funktiona , joka muuntaa "yksinkertaisen" funktion a -> b "yhdistelmäfunktioksi fa -> fb " . On tärkeää huomata, että f -tyypin arvon rakenteen tulee pysyä muuttumattomana "fmap"-sovelluksen jälkeen.
luokka Funktio f jossa fmap :: ( a -> b ) -> f a -> f bTriviaaleja käyttötapauksia:
plusOne = ( + 1 ) numerolista = [ 1 , 2 , 3 , 4 , 5 ] newNumberList = fmap plusOne numberList -- newNumberList == [2, 3, 4, 5, 6] neliö :: Int -> Int neliö = ( ^ 2 ) -- | "Set"-tietotyyppi vaatii "Data.Set"-kirjaston. squareAllSetElements :: Aseta Int -> Aseta Int squareAllSetElements = fmap- neliöFunktori voidaan määrittää lähes mille tahansa parametrisesti polymorfiselle tyypille .
PHP :ssä on maaginen menetelmä __invoke, jota kutsutaan, kun komentosarja yrittää suorittaa objektin funktiona:
class Funktio { julkinen funktio __kutsu ( int $a , int $b ) : bool { return $a < $b ; } } $arr = [ 1 , 5 , 2 , 8 , 9 , 0 , 3 ]; usort ( $arr , uusi Functor ());ML - murteissa ( Standard ML , Alice , OCaml ) funktori on moduulien ylittävä funktio, eli kartoitus moduuleista moduuleihin .