Što je funkcionalno programiranje? Vodič s primjerom
Što je funkcionalno programiranje?
Funkcionalno programiranje (također nazvano FP) način je razmišljanja o konstrukciji softvera stvaranjem čistih funkcija. Izbjegava koncepte zajedničkog stanja, promjenjivih podataka promatranih u objektno orijentiranom programiranju.
Funkcionalni jezici oslanjaju se na izraze i deklaracije, a ne na izvršavanje izjava. Stoga, za razliku od drugih procedura koje ovise o lokalnom ili globalnom stanju, izlaz vrijednosti u FP-u ovisi samo o argumentima proslijeđenim funkciji.
Karakteristike funkcionalnog programiranja
- Metoda funkcionalnog programiranja usmjerena je na rezultate, a ne na proces
- Naglasak je na onome što treba izračunati
- Podaci su nepromjenjivi
- Funkcionalno programiranje Rastavite 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
- U kasnim 70-ima istraživači sa Sveučilišta u Edinburghu definirali su ML (meta jezik)
- Početkom 80-ih Hope jezik dodaje algebarske tipove podataka za rekurziju i jednačinsko zaključivanje
- Godine 2004. Inovacija funkcionalnog jezika 'Scala.'
Funkcionalni programski jezici
Cilj svakog FP jezika je oponašanje matematičkih funkcija. Međutim, osnovni proces računanja je drugačiji u funkcionalnom programiranju.
Ovdje su neki od najistaknutijih 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či da biste trebali lako stvoriti podatkovne strukture umjesto da mijenjate one koje već postoje.
Referentna transparentnost
Funkcionalni programi trebaju izvoditi operacije kao da je prvi put. Dakle, znat ćete što se moglo ili ne mora dogoditi tijekom izvođenja programa i njegove nuspojave. U terminu FP to se naziva referentna transparentnost.
modularnost
Modularni dizajn povećava produktivnost. Mali moduli mogu se brzo kodirati i imaju veću mogućnost ponovne upotrebe što sigurno dovodi do bržeg razvoja programa. Osim toga, moduli se mogu testirati zasebno što vam pomaže smanjiti vrijeme utrošeno na testiranje jedinice i otklanjanje pogrešaka.
sposobnost snabdijevanja
Održivost je jednostavan izraz koji znači da je FP programiranje lakše održavati jer se ne morate brinuti da ćete slučajno promijeniti bilo što izvan zadane funkcije.
Prvorazredna funkcija
'Prvorazredna funkcija' je definicija koja se pripisuje entitetima programskog jezika koji nemaju ograničenja u korištenju. Stoga se prvorazredne funkcije mogu pojaviti bilo gdje u programu.
Zatvaranje
Zatvaranje je unutarnja funkcija koja može pristupiti varijablama nadređene funkcije, čak i nakon što se nadređena funkcija izvrši.
Funkcije višeg reda
Funkcije višeg reda ili uzimaju druge funkcije kao argumente ili ih vraćaju kao rezultate.
Funkcije višeg reda dopuštaju djelomične primjene ili currying. Ova tehnika primjenjuje funkciju na njene argumente jedan po jedan, jer 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 svoje parametre. Nije učinkovito ako ništa ne vraća. Štoviše, nudi isti izlaz za dane parametre
Primjer:
Function Pure(a,b) { return a+b; }
Nečiste funkcije
Nečisto funkcionira upravo suprotno od čistog. Imaju skrivene ulaze ili izlaze; naziva se nečistim. 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
Zajednička stanja važan su 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, odvajajući ih od ostatka softverskog koda. U FP programiranju od ključne je važnosti ukloniti nuspojave iz ostatka vaše programske logike.
Prednosti funkcionalnog programiranja
- Omogućuje izbjegavanje zbunjujućih problema i pogrešaka u kodu
- Lakše je testirati i izvršiti testiranje jedinica i otklanjanje pogrešaka FP koda.
- Paralelna obrada i istovremenost
- Primjena 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činkovitu upotrebu lambda računa
Ograničenja funkcionalnog programiranja
- Paradigma funkcionalnog programiranja nije laka, pa ju je teško razumjeti početniku
- Teško za održavanje jer se mnogi objekti razvijaju tijekom kodiranja
- Potrebno je puno ismijavanja i opsežno podešavanje okoline
- Ponovna uporaba 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. |
Fokusira se na: “Ono što radite. u programu.” | Ono što se fokusira je na "Kako radite svoje programiranje." |
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 i "Apstrakciju nad podacima" i "Apstrakciju nad ponašanjem". | Podržava samo “Apstrakciju preko podataka”. |
Zaključak
- Funkcionalno programiranje ili FP je način razmišljanja o konstrukciji softvera koji se temelji na nekim temeljnim definirajućim principima
- Koncepti funkcionalnog programiranja usmjereni su na rezultate, a ne na proces
- Cilj svakog FP jezika je oponašanje matematičkih funkcija
- Neki od najpoznatijih funkcionalnih programskih jezika: 1) Haskell 2) SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- 'Č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.
- Nepromjenjivi podaci znače da biste trebali lako stvoriti strukture podataka umjesto da mijenjate one koje već postoje
- Omogućuje izbjegavanje zbunjujućih problema i pogrešaka u kodu
- Funkcionalni kod nije jednostavan, pa ga je teško razumjeti početniku
- FP koristi nepromjenjive podatke dok OOP koristi promjenjive podatke