logo

Toiminnallisen ohjelmoinnin paradigma

Johdanto
Funktionaalinen ohjelmointi on ohjelmointiparadigma, jossa yritämme sitoa kaiken puhtaasti matemaattisten funktioiden tyyliin. Se on deklaratiivinen ohjelmointityyli. Sen pääpaino on siinä, mitä ratkaista, toisin kuin pakottava tyyli, jossa pääpaino on, miten ratkaista. Se käyttää lausekkeita lausekkeiden sijaan. Lauseke arvioidaan tuottamaan arvo, kun taas lauseke suoritetaan muuttujien määrittämiseksi. Näillä toiminnoilla on joitain erityisominaisuuksia, joita käsitellään alla.

Funktionaalinen ohjelmointi perustuu lambda-laskentaan:
Lambdalaskenta on Alonzo Churchin kehittämä kehys funktioiden laskennan tutkimiseen. Sitä voidaan kutsua maailman pienimmäksi ohjelmointikieleksi. Se antaa määritelmän sille, mikä on laskettavissa. Kaikki mikä voidaan laskea lambda-laskemalla, on laskettavissa. Se vastaa Turingin konetta kyvyltään laskea. Se tarjoaa teoreettisen viitekehyksen toimintojen kuvaamiselle ja niiden arvioinnille. Se on lähes kaikkien nykyisten toiminnallisten ohjelmointikielten perusta.
Fakta: Alan Turing oli Alonzo Churchin opiskelija, joka loi Turingin koneen, joka loi perustan pakottavalle ohjelmointityylille.



Toiminnallista ohjelmointia tukevat ohjelmointikielet: Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.

abstrakteja menetelmiä

Toiminnallisen ohjelmoinnin käsitteet:

  • Puhtaita toimintoja
  • Rekursio
  • Viittausläpinäkyvyysfunktiot ovat ensiluokkaisia ​​ja voivat olla korkeamman asteen muuttujat ovat muuttumattomia

Puhtaat toiminnot: Näillä funktioilla on kaksi pääominaisuutta. Ensinnäkin ne tuottavat aina saman tulosteen samoilla argumenteilla riippumatta mistään muusta.
Toiseksi niillä ei ole sivuvaikutuksia, eli ne eivät muuta argumentteja tai paikallisia/globaalisia muuttujia tai tulo-/lähtövirtoja.
Myöhemmin ominaisuutta kutsutaan muuttumattomuudeksi. Puhtaan funktion ainoa tulos on sen palauttama arvo. Ne ovat deterministisiä.
Toiminnallisen ohjelmoinnin avulla tehtyjen ohjelmien virheenkorjaus on helppoa, koska puhtailla funktioilla ei ole sivuvaikutuksia tai piilotettuja I/O:ita. Puhtaat toiminnot helpottavat myös rinnakkaisten/samanaikaisten sovellusten kirjoittamista. Kun koodi on kirjoitettu tällä tyylillä, älykäs kääntäjä voi tehdä monia asioita - se voi rinnastaa ohjeet, odottaa tulosten arvioimista tarvittaessa ja muistaa tulokset, koska tulokset eivät koskaan muutu niin kauan kuin syöte ei muutu.
esimerkki puhtaasta funktiosta:



sum(x, y) // sum is function taking x and y as arguments return x + y // sum is returning sum of x and y without changing them>

Rekursio: Toiminnallisissa kielissä ei ole for- tai while-silmukkaa. Iteraatio toiminnallisilla kielillä toteutetaan rekursion avulla. Rekursiiviset funktiot kutsuvat itseään toistuvasti, kunnes se saavuttaa perustapauksen.
esimerkki rekursiivisesta funktiosta:

fib(n) if (n <= 1) return 1; else return fib(n - 1) + fib(n - 2);>

Viittauksen läpinäkyvyys: Toiminnallisissa ohjelmissa muuttujat, jotka kerran on määritelty, eivät muuta arvoaan koko ohjelman ajan. Toiminnallisilla ohjelmilla ei ole osoituskäskyjä. Jos meidän on tallennettava arvoa, määritämme sen sijaan uusia muuttujia. Tämä eliminoi sivuvaikutusten mahdollisuudet, koska mikä tahansa muuttuja voidaan korvata sen todellisella arvolla missä tahansa suorituskohdassa. Minkä tahansa muuttujan tila on vakio milloin tahansa.

Esimerkki:



x = x + 1 // this changes the value assigned to the variable x. // So the expression is not referentially transparent.>

Toiminnot ovat ensiluokkaisia ​​ja voivat olla korkeampia: Ensimmäisen luokan funktioita käsitellään ensimmäisen luokan muuttujina. Ensimmäisen luokan muuttujat voidaan välittää funktioille parametreina, ne voidaan palauttaa funktioista tai tallentaa tietorakenteisiin. Korkeamman asteen funktiot ovat funktioita, jotka ottavat muita toimintoja argumentteina ja ne voivat myös palauttaa funktioita.

string.replaceall java

Esimerkki:

show_output(f) // function show_output is declared taking argument f // which are another function f(); // calling passed function print_gfg() // declaring another function print('hello gfg'); show_output(print_gfg) // passing function in another function>

Muuttujat ovat muuttumattomia: Toiminnallisessa ohjelmoinnissa emme voi muokata muuttujaa sen alustuksen jälkeen. Voimme luoda uusia muuttujia – mutta emme voi muokata olemassa olevia muuttujia, ja tämä todella auttaa ylläpitämään tilaa koko ohjelman ajan. Kun luomme muuttujan ja asetamme sen arvon, voimme luottaa siihen, että muuttujan arvo ei koskaan muutu.

Funktionaalisen ohjelmoinnin edut ja haitat

Edut:

  1. Puhtaat funktiot on helpompi ymmärtää, koska ne eivät muuta mitään tiloja ja riippuvat vain niille annetusta syötteestä. Riippumatta tuotosta, jonka he tuottavat, on niiden tuottoarvo. Niiden funktion allekirjoitus antaa kaikki tiedot heistä, eli niiden palautustyypin ja argumentit.
  2. Toiminnallisten ohjelmointikielten kyky käsitellä toimintoja arvoina ja välittää ne funktioille parametreina tekee koodista luettavamman ja helpommin ymmärrettävän.
  3. Testaus ja virheenkorjaus on helpompaa. Koska puhtaat funktiot ottavat vain argumentteja ja tuottavat tulosteen, ne eivät tuota muutoksia, eivätkä ota syötettä tai tuottavat piilotettuja tulosteita. Ne käyttävät muuttumattomia arvoja, joten joidenkin ongelmien tarkistaminen ohjelmissa, jotka on kirjoitettu pelkillä funktioilla, on helpompi tarkistaa.
  4. Sitä käytetään samanaikaisuuden / rinnakkaisuuden toteuttamiseen, koska puhtaat funktiot eivät muuta muuttujia tai muita sen ulkopuolella olevia tietoja.
  5. Se ottaa käyttöön laiska arvioinnin, joka välttää toistuvan arvioinnin, koska arvo arvioidaan ja tallennetaan vain silloin, kun sitä tarvitaan.

Haitat:

linux-arkkitehtuuri
  1. Joskus puhtaiden funktioiden kirjoittaminen voi heikentää koodin luettavuutta.
  2. Ohjelmien kirjoittaminen rekursiiviseen tyyliin silmukoiden käyttämisen sijaan voi olla hieman pelottavaa.
  3. Puhtaiden funktioiden kirjoittaminen on helppoa, mutta niiden yhdistäminen muuhun sovellukseen ja I/O-toimintoihin on vaikea tehtävä.
  4. Muuttumattomat arvot ja rekursio voivat johtaa suorituskyvyn heikkenemiseen.

Sovellukset:

  • Sitä käytetään matemaattisissa laskelmissa.
  • Sitä tarvitaan silloin, kun vaaditaan samanaikaisuutta tai rinnakkaisuutta.

Fakta: Whatsapp tarvitsee vain 50 insinööriä 900 miljoonaan käyttäjiä koska Erlangia käytetään sen samanaikaisuustarpeiden toteuttamiseen. Facebook käyttää Haskellia roskapostintorjuntajärjestelmässään.