Što je funkcionalno programiranje?
⚡ Pametni sažetak
Funkcionalno programiranje je način izgradnje softvera sastavljanjem čistih funkcija, izbjegavajući dijeljeno stanje i promjenjive podatke. Naglašava izraze nad naredbama, tako da izlaz funkcije ovisi samo o njezinim ulazima, što programe čini predvidljivima i testiranima.

Što je funkcionalno programiranje?
Funkcionalno programiranje (također nazvano FP) je način razmišljanja o konstrukciji softvera stvaranjem čistih funkcija. Izbjegava koncepte dijeljenog stanja i promjenjivih podataka koji se opažaju u objektno orijentiranom programiranju.
Funkcionalni jezici naglašavaju izraze i deklaracije, a ne izvršavanje naredbi. Stoga, za razliku od drugih procedura koje ovise o lokalnom ili globalnom stanju, izlazna vrijednost u FP-u ovisi samo o argumentima proslijeđenim funkciji.
Karakteristike funkcionalnog programiranja
- Metoda funkcionalnog programiranja fokusira se na rezultate, a ne na proces.
- Naglasak je na onome što se treba izračunati.
- Podaci su nepromjenjivi.
- Funkcionalno programiranje rastavlja problem na funkcije.
- Izgrađen je na konceptu matematičkih funkcija koje koriste uvjetne izraze i rekurziju za izvođenje izračuna.
- Ne podržava iteraciju poput naredbi petlje i uvjetnih naredbi poput If-Else.
Povijest funkcionalnog programiranja
- Temelj funkcionalnog programiranja je lambda račun. Razvijen je 1930-ih za funkcionalnu primjenu, definiciju i rekurziju.
- LISP je bio prvi funkcionalni programski jezik. McCarthy ga je dizajnirao 1960. godine.
- Krajem 70-ih, istraživači sa Sveučilišta u Edinburghu definirali su ML (Meta Language).
- Početkom 80-ih, Hope jezik je dodao algebarske tipove podataka za rekurziju i ekvacionalno zaključivanje.
- Funkcionalni jezik 'Scala' je inoviran 2004. godine.
Funkcionalni programski jezici
Cilj bilo kojeg FP jezika je oponašanje matematičkih funkcija. Međutim, osnovni proces izračuna je drugačiji u funkcionalnom programiranju.
Evo nekih od najpoznatijih funkcionalnih programskih jezika:
- Haskell
- SML
- Clojure
- Skala
- erlang
- bjelica
- F#
- ML/OCaml Lisp / Shema
- XSLT
- SQL
- Mathematica
Osnovna terminologija funkcionalnog programiranja i Concepts
Nepromjenjivi podaci
Nepromjenjivi podaci znače da biste trebali moći lako stvarati strukture podataka umjesto mijenjanja onih koje već postoje.
Referentna transparentnost
Funkcionalni programi trebali bi izvršavati operacije kao da ih izvršavaju prvi put. Dakle, znat ćete što se moglo, a što nije moglo dogoditi tijekom izvršavanja programa i koje su bile njegove nuspojave. U FP terminologiji, to se naziva referencijalna transparentnost.
modularnost
Modularni dizajn povećava produktivnost. Mali moduli mogu se brzo kodirati i imaju veću vjerojatnost ponovne upotrebe, što zasigurno dovodi do bržeg razvoja programa. Osim toga, moduli se mogu testirati zasebno, što vam pomaže smanjiti vrijeme utrošeno na testiranje jedinica i otklanjanje pogrešaka.
sposobnost snabdijevanja
Održavanje je jednostavan pojam koji znači da je FP programiranje lakše održavati jer se ne morate brinuti o slučajnoj promjeni bilo čega izvan zadane funkcije.
Prvorazredna funkcija
'Funkcija prve klase' je definicija koja se pripisuje entitetima programskog jezika koji nemaju ograničenja u svojoj upotrebi. Stoga se funkcije prve klase mogu pojaviti bilo gdje u programu.
Zatvaranje
Zatvorenje je unutarnja funkcija koja može pristupiti varijablama roditeljske funkcije, čak i nakon što je roditeljska funkcija izvršena.
Funkcije višeg reda
Funkcije višeg reda ili uzimaju druge funkcije kao argumente ili ih vraćaju kao rezultate.
Funkcije višeg reda omogućuju djelomične primjene ili currying. Ova tehnika primjenjuje funkciju na njezine argumente jedan po jedan, pri čemu svaka aplikacija vraća novu funkciju koja prihvaća sljedeći argument.
Čista funkcija
'Čista funkcija' je funkcija čiji su ulazi deklarirani kao ulazi i nijedan od njih ne bi trebao biti skriven. Izlazi se također deklariraju kao izlazi.
Čiste funkcije djeluju na temelju svojih parametara. Nije učinkovito ako ne vraća ništa. Štoviše, nudi isti izlaz za zadane parametre.
Primjer:
Function Pure(a,b) { return a+b; }
Nečiste funkcije
Nečiste funkcije su upravo suprotne čistim funkcijama. Imaju skrivene ulaze ili izlaze i zato se nazivaju nečistima. Nečiste funkcije ne mogu se koristiti ili testirati izolirano jer imaju ovisnosti.
Primjer
int z; function notPure(){ z = z+10; }
Funkcija Sastav
Kompozicija funkcije je kombinacija 2 ili više funkcija da bi se napravila nova.
Zajednička stanja
Dijeljeno stanje je važan koncept u OOP programiranju. U osnovi, to je dodavanje svojstava objektima. Na primjer, ako je tvrdi disk objekt, kapacitet pohrane i veličina diska mogu se dodati kao svojstva.
Nuspojave
Nuspojave su sve promjene stanja koje se događaju izvan pozvane funkcije. Najveći cilj bilo kojeg FP programskog jezika je minimizirati nuspojave odvajanjem od ostatka softverskog koda. U FP programiranju ključno je ukloniti nuspojave iz ostatka programske logike.
Prednosti funkcionalnog programiranja
- Omogućuje vam izbjegavanje zbunjujućih problema i pogrešaka u kodu.
- Lakše testiranje i izvršavanje jediničnog testiranja i otklanjanje pogrešaka u FP-u Code.
- Paralelna obrada i konkurentnost.
- Implementacija vrućeg koda i tolerancija grešaka.
- Nudi bolju modularnost s kraćim kodom.
- Povećana produktivnost programera.
- Podržava ugniježđene funkcije.
- Funkcionalne konstrukcije poput Lazy Map & Lists itd.
- Omogućuje učinkovito korištenje lambda računa.
Ograničenja funkcionalnog programiranja
- Paradigma funkcionalnog programiranja nije jednostavna, pa ju je početnicima teško razumjeti.
- Teško za održavanje jer se mnogi objekti mijenjaju tijekom kodiranja.
- Potrebno je puno ruganja i opsežnog uređenja okoliša.
- Ponovna upotreba je vrlo komplicirana i zahtijeva stalno refaktoriranje.
- Objekti možda ne predstavljaju problem ispravno.
Funkcionalno programiranje nasuprot objektno orijentiranom programiranju
| Funkcionalno programiranje | OOP |
|---|---|
| FP koristi nepromjenjive podatke. | OOP koristi promjenjive podatke. |
| Slijedi model temeljen na deklarativnom programiranju. | Slijedi model imperativnog programiranja. |
| Fokus je: „Što radite u programu.“ | Ono na što se fokusira je: „Kako programirate.“ |
| Podržava paralelno programiranje. | Nema podrške za paralelno programiranje. |
| Njegove funkcije nemaju nuspojava. | Metoda može izazvati mnoge nuspojave. |
| Kontrola protoka izvodi se pomoću poziva funkcija i poziva funkcija s rekurzijom. | Proces kontrole protoka provodi se pomoću petlji i uvjetnih naredbi. |
| Redoslijed izvršavanja naredbi nije jako bitan. | Važan je redoslijed izvršavanja naredbi. |
| Podržava oba "trbušnjaka"trac"preko podataka" i "Abs"tracodnos nad ponašanjem.” | Podržava samo "Abs"tracupravljanje podacima”. |

