- Perusajatukset
- ominaisuudet
- Puhtaat toiminnot
- Ensiluokkaiset ominaisuudet
- Viittausläpinäkyvyys
- rekursio
- muuttumattomuudesta
- esimerkit
- Pakolliset ja deklaratiiviset lähestymistavat
- Puhtaat toiminnot
- Toimii ensimmäisen luokan objekteina
- Etu
- Lyhyempi ja helpompi ymmärtää
- Ei ohjausvirtausta
- haitat
- Sovellukset
- Toiminnallinen menetelmä
- Kielet, jotka tukevat toiminnallista ohjelmointia
- D
- Erlang
- Haskell
- ML
- Objektiivinen Caml
- ohjelma
- Viitteet
Funktionaalinen ohjelmointi vastaa kuvion ohjelmointi perustuu käsitteeseen todetaan käyttäytymistä ohjelman toiminnallisena matemaattisen mallin sijaan nimenomaisen sekvenssit ohjeita prosessorin, joka on tärkein käsite välttämätöntä ohjelmointi.
Toiminnallinen kieli korostaa lauseita ja termejä lauseiden suorittamisen sijasta. Tässä ohjelmoinnissa tulos riippuu vain funktiolle siirretyistä parametreistä, toisin kuin muut tyypit, jotka noudattavat paikallista tai globaalia tilaa.

Kaavio siitä, miten kartoitustoiminto toimii Haskell-toiminnallisella ohjelmointikielellä. Lähde: Pluke - Oma työ, CC0 commons.wikimedia.org.
Sen nimi tulee matemaattisista funktioista, jotka ovat tulojoukkojen osoittaminen lähtöjoukkoon. Matemaattisella funktiolla ei todellakaan tehdä mitään työtä, vaan kuvataan pikemminkin prosessimalli, joka selittää kaavalla mitä sisääntulot tuottavat funktiossa.
Perusajatukset
Funktionaalisen ohjelmoinnin perustana oli lambda calculus, joka kehitettiin 1900-luvun kolmannella vuosikymmenellä funktioiden määrittelemiseksi ja soveltamiseksi. LISP oli ensimmäinen laatuaan oleva ohjelmointikieli, suunniteltu vuonna 1960.
Vaikka suurin osa ohjelmointikieleistä koostuu tuloista, lähdöistä ja ulkoisista muuttujista, jotka voidaan asettaa tai käyttää toimintojen sisällä, toiminnallinen ohjelmointi välttää tämän. Ajatuksena on, että joka kerta kun funktiota kutsutaan samoilla parametreilla, sen pitäisi palauttaa sama arvo.
ominaisuudet
Funktionaalisia ohjelmointikieliä kutsutaan sovelluksiksi, koska funktioita sovelletaan niiden parametreihin samoin kuin deklaratiivisiin ja muihin kuin menettelytapoihin, koska määritelmät määrittelevät, mikä on laskettava eikä miten se lasketaan.
Puhtaat toiminnot
Toiminto on puhdas, kun sillä ei ole havaittavissa olevia sivuvaikutuksia, kuten ulkoisten muuttujien muuttaminen, tiedostojärjestelmän muutokset ja niin edelleen.
Näitä toimintoja pidetään vakuuttavina, koska ne eivät nimenomaisesti muuta mitään muuttujia, joista koodin muut osat saattavat olla riippuvaisia jossain vaiheessa. Vaikuttaa hankalalta koodata näitä rajoituksia, mutta näiden toimintojen on katsottava olevan deterministisiä, ennakoitavissa olevia ja yhdistelmäkelpoisia.
Ensiluokkaiset ominaisuudet
Toimintoja pidetään arvoina, jotka voidaan määrittää muuttujille, joten ne voidaan siirtää muihin toimintoihin ja palauttaa niistä. Eli funktiota voidaan käyttää ikään kuin se olisi parametri tai palautettavana arvona.
Tämä tarkoittaa, että funktio voidaan siirtää sellaisenaan, eikä vain funktion tuloksena. Tarkastellaan esimerkiksi kaksinkertaista (x) funktiota, joka palauttaa tuloparametrinsa arvon kaksinkertaisena. Siten kaksinkertainen (2) palauttaisi 4.
Koska kyseessä on ensimmäisen luokan funktio, koodi (kaksinkertainen (kaksinkertainen (2)) olisi sama kuin kaksinkertainen (4). Tämän avulla voit sijoittaa yhden toiminnon toisen parametriksi ja niin edelleen.
Viittausläpinäkyvyys
Se viittaa tosiasiaan, että tässä ohjelmointimallissa ei ole osoituslausekkeita. Toisin sanoen sinun on määritettävä uudet muuttujat, jos haluat tallentaa lisäarvoja. Siksi muuttujan tila on vakio jatkuvasti.
Tämä eliminoi pienen mahdollisen ei-toivottujen vaikutusten mahdollisuuden, koska mikä tahansa muuttuja voidaan korvata sen todellisella arvolla missä tahansa ohjelman suorituskohdassa.
rekursio
Toiminnallisessa ohjelmoinnissa ei ole "for" - ja "while" -silmukoita. Sen sijaan iteraatio perustuu rekursioon. Rekursio toteutetaan rekursiivisilla funktioilla, jotka kutsuvat itseään toistuvasti, kunnes perustaso saavutetaan.
muuttumattomuudesta
Muuttujat ovat muuttumattomia, ts. Muuttujaa ei ole mahdollista muokata, kun se on alustettu. Vaikka voit luoda uuden muuttujan, olemassa olevien muuttujien muuttaminen ei ole sallittua.
esimerkit
Pakolliset ja deklaratiiviset lähestymistavat
Esimerkillä voit analysoida näiden lähestymistapojen eroa suorittamalla saman operaation molemmissa järjestelyissä, eli suodattaa parittomat numerot luettelosta korvaamalla 5 parillisilla numeroilla, jotka ovat vähemmän kuin 5.

Se on sama laskelma, samalla tuloksella. Kuten näette, pakollinen koodi on kuitenkin sanallinen ja ei heti selvä. Toisaalta deklaratiivinen lähestymistapa on luettavissa ja selkeä, koska se keskittyy siihen, mitä haluat saada.
Puhtaat toiminnot
Mitä määritellään puhtaiksi ja epäpuhtaiksi toiminnoiksi, voidaan selventää muutamilla perusesimerkkeillä:

Toimii ensimmäisen luokan objekteina
Se tarkoittaa toimintojen käyttämistä samalla tavalla kuin datan käyttöä. Siksi ne voidaan siirtää parametreiksi toiselle toiminnolle. Seuraavassa esimerkissä int-toiminto voidaan välittää parametrina karttatoiminnolle:
>>> luettelo (kartta (int,))
Ne voidaan osoittaa muuttujille ja palauttaa. Esimerkiksi seuraavassa koodissa voit määrittää hello_world-toiminnon ja suorittaa muuttujan funktiona.

Etu
- Keskity siihen, mitä haluat saavuttaa (deklaratiivinen) eikä siihen, kuinka saavuttaa (välttämätön).
- Ne eivät sisällä määrityslausekkeita, joten kun muuttujille on annettu arvo, ne eivät enää muutu. Siksi toiminnalliset ohjelmat eivät sisällä sivuvaikutuksia.
- Looginen virtaus on selkeä, koska tila on vähemmän hajaantunut eikä sitä ole implisiittisesti muokattu.
- Tukee laiska arvioinnin käsitettä, mikä tarkoittaa, että arvo arvioidaan ja tallennetaan vain tarvittaessa.
- Koska puhtaat toiminnot eivät muuta mitään tilaa ja ovat täysin riippuvaisia panoksesta, ne on helppo ymmärtää. Tällaisten toimintojen antama palautusarvo on sama kuin niiden tuottama tulos.
- Puhtaiden funktioiden luonteen vuoksi, jotta vältetään muuttujien tai mahdollisten ulkoisten tietojen muutokset, samanaikaisuuden toteutus tulee voimaan.
- Toimintoja käsitellään arvoina, jotka siirtyvät parametreiksi muihin toimintoihin. Tämä parantaa koodin ymmärtämistä ja luettavuutta.
- Puhtaat toiminnot ottavat parametrit kerran, tuottaen muuttumattoman tulosteen. Muuttamattomien arvojen käyttö helpottaa virheenkorjausta ja testausta.
Lyhyempi ja helpompi ymmärtää
Ne ovat lyhyempiä ja ymmärrettäviä kuin pakolliset. Tutkimukset ovat osoittaneet, että ohjelmoijan keskimääräinen tuottavuus koodirivien suhteen on suurin piirtein sama kaikilla ohjelmointikielellä, mikä tarkoittaa suurempaa tuottavuutta.
Ei ohjausvirtausta
Funktion kutsumisella ei voi olla erilaista vaikutusta kuin sen tuloksen laskemisessa. Tämä sulkee pois pääasiallisen virheiden lähteen, mikä tekee myös suorittamisjärjestyksestä merkityksettömän, koska mikään sivuvaikutus ei voi muuttaa lausekkeen arvoa ja se voidaan arvioida milloin tahansa.
Ohjelmoija on vapautettu valvontavirran perustamisen taakasta. Koska lausekkeita voidaan arvioida milloin tahansa, muuttujat voidaan korvata niiden arvoilla.
Tämä autonomia tekee toiminnallisista ohjelmista matemaattisemmin hallittavissa kuin perinteiset ohjelmat.
haitat
- Toiminnallinen ohjelmointimalli ei ole yksinkertainen, joten aloittelijan on vaikea ymmärtää.
- Sitä on vaikea ylläpitää, koska monet esineet kehittyvät koodauksen aikana.
- Joissakin tapauksissa puhtaan funktioiden kirjoittaminen heikentää koodin luettavuutta.
- Muuttamattomat arvot yhdessä rekursion kanssa voivat johtaa järjestelmän suorituskyvyn heikentymiseen dramaattisesti.
- Uudelleenkäyttö on erittäin monimutkaista ja vaatii jatkuvaa reagointia.
- Ohjelmien kirjoittaminen rekursiivisella tyylillä silmukoiden tai silmukoiden käytön sijasta voi olla erittäin pelottava tehtävä.
- Kohteet eivät välttämättä edusta ongelmaa oikein.
- Vaikka puhtaiden funktioiden kirjoittaminen osoittautuu yksinkertaiseksi, niiden yhdistäminen muuhun sovellukseen ja syöttö- / tulostustoimintoihin on melko vaikeaa
Sovellukset
Keinotekoisen älykkyyden ohjelmointi tapahtuu toiminnallisilla ohjelmointikielellä ja tekoälyn tekniikat siirtyvät reaalimaailman sovelluksiin.
Se on erinomainen myös monimutkaisten matemaattisten mallien toteuttamisessa. Tästä syystä yksi funktionaalisten kielten pääkäytöistä on perinteisesti ollut akateeminen. Se on hyödyllinen kehitettäessä suoritettavia spesifikaatioita ja prototyyppien toteutuksia.
Monet toiminnalliset kielet ovat erinomaisia myös rinnakkaisprosessoinnin toteuttamisessa. Tämä johtuu sen kyvystä hyödyntää puhtaita toimintoja, jotka palauttavat aina saman arvon riippumatta niiden suorittamisjärjestyksestä.
Toiminnallinen menetelmä
WhatsApp käyttää Erlangin ohjelmointikieltä, joka noudattaa toiminnallista ohjelmointimallia, jolloin yli sata työntekijäänsä voi käsitellä noin 1,6 miljardin ihmisen tietoja.
Toinen tärkeä funktionaalisen ohjelmointityylin kantaja on Haskell. Facebook käyttää sitä roskapostinvastaisessa järjestelmässään. Jopa JavaScript, yksi yleisimmin käytetyistä ohjelmointikieleistä, uhmaa dynaamisesti tyypitetyn funktionaalisen kielen ominaisuuksia.
Kielet, jotka tukevat toiminnallista ohjelmointia
D
Se on suunniteltu C ++: n jälkeen, saaden kaikki hyötynsä ja poistamalla havaitut heikkoudet siitä, että sen on oltava yhteensopiva C: n kanssa.
Erlang
Se on erittäin skaalautuva ja samanaikainen, joten se on ihanteellinen tietoliikenteelle ja muille sovelluksille, jotka vastaanottavat valtavia määriä dataa arvaamattomassa järjestyksessä.
Haskell
Tämä on puhdas toiminnallinen ohjelmointikieli, joka käyttää Lambda-laskentaa.
ML
Sitä käytetään matemaattisissa, tieteellisissä, taloudellisissa, analyyttisissä ja muissa sovelluksissa. Yksi sen vahvuuksista on ohjelmistojen valmistaminen muiden ohjelmien käsittelemiseen.
Objektiivinen Caml
Se on avoimen lähdekoodin kieli, joka perustuu Camliin. Se pyrkii luomaan erittäin kevyitä ohjelmia, auttaen niitä latautumaan ja ajamaan nopeammin kuin muiden kielten luomat.
ohjelma
Se perustuu LISP-syntaksiin ja ALGOL-rakenteeseen. Yksinkertaisuutensa vuoksi sitä käytetään monissa tietotekniikan kursseissa johdanto-osana ohjelman suunnittelulle osoittamaan joitain tietokoneohjelmoinnin perusteita.
Viitteet
- Kuka isännöi tätä (2019). Opi toiminnallinen ohjelmointi: Tämä tyyli koodausta puhaltaa mieltäsi. Otettu: whoishostingthis.com.
- Andrea Bertoli (2019). Riittävä johdanto toiminnalliseen ohjelmointiin. Otettu: dev.to.
- Hacker Earth (2020). Toiminnallinen ohjelmointi. Otettu: hackerearth.com.
- Clojure (2020). Toiminnallinen ohjelmointi. Ostettu: clojure.org.
- Akhil Bhadwal (2020). Toiminnallinen ohjelmointi: käsitteet, edut, haitat ja sovellukset. Hakata. Ostettu: hackr.io.
- Guru99 (2020). Mikä on toiminnallinen ohjelmointi? Opetusohjelma esimerkillä. Otettu: guru99.com.
