Toimiva kohde

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 7.10.2020 tarkistetusta versiosta . tarkastukset vaativat 4 muokkausta .

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++

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 ); }

JavaScript

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 ); // kahdeksan

C# ja VB.NET

C # ja VB.NET käyttävät delegaatteja ohjelmoimaan toimijoita .

Java

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 ) ) );

Haskell

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 b

Triviaaleja 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

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

ML - murteissa ( Standard ML , Alice , OCaml ) funktori on moduulien ylittävä funktio, eli kartoitus moduuleista moduuleihin .

Muistiinpanot

  1. Tietojenkäsittelyjärjestelmien selittävä sanakirja, 1990 .

Linkit