
Edmund Richardson
0
1107
178
Ako potrošite bilo kakvo vrijeme čitajući na trendovima programiranja na Internetu, čuli ste o funkcionalnom programiranju. Izraz se izgovara prilično često, ali što to znači?
Čak i ako ste svjesni što je funkcionalno programiranje, možda vam nije jasno koji su jezici za to najprikladniji. Uostalom, nisu svi programski jezici stvoreni jednakim. Iako možete primijeniti funkcionalne paradigme programiranja na mnogim jezicima, još uvijek postoje neki na kojima ćete se osjećati puno ugodnije.
Što je funkcionalno programiranje?
Ako ste podrijetlom iz matematike, počet ćete s funkcionalnim programiranjem. To je zato što paradigma funkcionalnog programiranja tretira računarstvo kao matematičke funkcije. Ako nemate matematičko podrijetlo, to bi moglo ostati nejasno.
U osnovi, funkcionalno programiranje funkcije i podatke tretira kao nepromjenjive. Podaci prosljeđujete u funkciju, a ona obično vraća te transformirane podatke ili neku drugu vrstu podataka. U funkcionalnom programiranju funkcija nikada ne smije mijenjati izvorne podatke ili stanje programa.
Postoji sličnost s Unix filozofijom da svaki program treba učiniti jedno dobro. Funkcija ne smije dodirivati različite dijelove programa. Umjesto toga, trebao bi uzeti svoj doprinos i dati vam izlaz.
U idealnom slučaju, funkcije bi trebale biti čiste kad god je to moguće u funkcionalnom programiranju. To znači da će, s obzirom na isti ulaz, izlaz funkcije uvijek ostati isti.
Funkcionalno nasuprot objektno programiranom programiranju
To je dramatičan odmak od nečega poput objektno orijentiranog programiranja. U objektno orijentiranom programiranju često imate osnovni objekt s različitim metodama posvećenim promjeni podataka ili stanja koji su dio tog objekta. Metoda može čak izmijeniti podatke ili stanja ako nije izričito navedena.
U praktičnim programima to ponekad ima smisla. To može reći da programe može teže održavati, jer nije uvijek jasno što mijenja stanje ili podatke. Funkcionalno programiranje izvorno se koristilo u akademskim okruženjima, ali također može pomoći u sprečavanju ovakvih problema.
1. JavaScript
Neki programski jezici omogućuju funkcionalno programiranje, dok ga drugi potiču ili čak i provode. JavaScript spada u prvu kategoriju. Iako možete koristiti funkcionalne paradigme programiranja na jeziku, možete jednako lako koristiti objektno orijentirani pristup.
Ipak, u JavaScript je puno funkcionalnih paradigmi programiranja. Uzmimo, na primjer, funkcije višeg reda. To su funkcije koje mogu kao argument uzimati druge funkcije.
JavaScript ima nekoliko funkcija koje rade s nizovima poput karta()
, smanjiti()
, filtar()
, i druge, a sve su to funkcije višeg reda. To vam omogućuje da ih spojite zajedno kako biste brzo sve stvari napravili s nizom.
Dok su rani JavaScript imali problema s mogućnostima izmjenjivanja, novije verzije standarda ECMAScript nude ispravke. Umjesto catch-all var
ključnu riječ za definiranje varijabli, sada imate const
i pustiti
. Prvo vam omogućuje da definirate konstante, kao što i naziv govori. Drugi, pustiti
, ograničava područje varijable na funkciju u kojoj je deklarirana.
2. Python
Kao i JavaScript, Python je opći jezik s kojim možete koristiti bilo koji broj programskih paradigmi. Python može imati svoje nedostatke 4 razloga zašto Python nije programski jezik za vas 4 razloga zašto Python nije programski jezik za vas Programski jezik Python-a izuzetno je popularan, ali evo nekoliko razloga zbog kojih biste željeli izbjeći Python , , ali funkcionalno programiranje nije jedno od njih. U službenoj dokumentaciji Pythona postoji čak uvod u funkcionalno programiranje.
Za početak ćete pronaći mnoge iste karta()
, filtar()
, smanjiti()
, i slične funkcije koje su gore spomenute ugrađene. Kao i kod JavaScript-a, to su funkcije višeg reda jer uzimaju i druge funkcije kao argumente. U Pythonu, funkcionalno programiranje ima prednost u obliku À
ključna riječ.
Lambda izraze možete koristiti na nekoliko načina. Jedan od načina za korištenje je skraćenje za jednostavne funkcije. Kada ste dodijeljeni varijabli, možete nazvati lambda izraze točno onako kako bi se radilo na standardnoj Python funkciji. Prava prednost lambda izraza dolazi kada ih upotrebljavate kao anonimne funkcije.
Anonimne funkcije djeluju i na JavaScriptu i drugim jezicima na ovom popisu. Oni su posebno korisni ako se koriste sa funkcijama višeg reda jer ih možete definirati na licu mjesta. Bez anonimnih funkcija, morali biste unaprijed definirati čak i jednostavne dodatke kao naručene funkcije.
3. Clojure
Za razliku od JavaScripta i Pythona, Clojure možda baš nije naziv kućanstva, čak ni među programerima. U slučaju da niste upoznati, Clojure je narječje programskog jezika Lisp, koji potječe iz kasnih 1950-ih. To sa sobom donosi vrlo specifičan način izvođenja stvari koje su savršene za funkcionalno programiranje.
Kao i drugi Lispovi dijalekti, Clojure kôd tretira kao podatke. To znači da se kod učinkovito može promijeniti. Za razliku od ostalih Lispovih dijalekata, Clojure se pokreće na platformi Java i sastavlja se u JVM bytecode. To znači da može raditi s Java knjižnicama, bilo da su napisane u Clojure ili ne.
Za razliku od prethodnih jezika na ovom popisu, Clojure je funkcionalni programski jezik od početka. To znači da se zalaže za nepromjenljivost kad god je to moguće, posebno unutar podataka.
Clojure ne očekuje da svi programi budu matematički “dokaziva,” ali potiče korištenje čistih funkcija kad god je to moguće.
4. Brijest
Elm je jedan od novijih jezika na ovom popisu čisto funkcionalnog jezika koji je u početku dizajnirao Evan Czaplicki 2012. Jezik je stekao popularnost među web programerima, posebno za izradu korisničkih sučelja.
Za razliku od svakog prethodnog unosa na ovom popisu, Elm koristi statičku provjeru tipa. To pomaže da se osiguraju izuzeci tijekom izvršavanja, a pogreške se zahtijevaju za vrijeme sastavljanja. To znači manje vidljive pogreške za korisnike, što je veliki plus.
Kompilator Elm cilja HTML, CSS i JavaScript. Na isti način na koji pomoću Clojure-a možete pisati programe koji rade na Javi, u Elmu možete pisati i aplikacije koje koriste JavaScript knjižnice.
Glavna razlika između Elma i drugih jezika ovdje je u tome što nećete naći generičke filtar()
, karta()
, i slične funkcije. Umjesto toga, definirani su tipom podataka poput List.map
ili Dict.map
.
5. Haskell
Haskell je još jedan statički tip, čisto funkcionalni jezik. Za razliku od Elma, Haskell je već neko vrijeme u blizini. Prva verzija jezika dizajnirana je 1990. Najnoviji standard je Haskell 2010, dok je sljedeća verzija planirana za 2020.
Kao što smo već istražili, Haskell-ova čisto funkcionalna priroda znači da po dizajnu funkcije ne bi smjele imati nuspojave. To ga čini vrlo prikladnim za rješavanje problema u stvarnom svijetu, unatoč korijenima funkcionalnog programiranja u akademskim krugovima.
Unatoč nedostatku popularne popularnosti, Haskell je bio zaposlen u nekim široko korištenim projektima. Upravitelj prozora Xmonad u cijelosti je napisan na jeziku Haskell. Pandoc, koji pretvara različite vrste markiranja u i iz drugih formata, također koristi jezik.
Standard karta()
, filtar()
, smanjiti()
, prisutne su i druge funkcije višeg reda koje bi vam trebale omogućiti da uzmete koncepte iz JavaScripta ili Pythona u Haskell. Ako želite naučiti više o jeziku, početna je početna točka Learn You a Haskell for Great Good.
Jeste li novi u programiranju?
Neki od gore navedenih pojmova i jezika mogu izgledati pomalo ezoterično ako još niste iskusan koder. To je dobro, jer je saznanje onoga što ne znate jedan od prvih koraka u boljem učenju.
Neki od gore navedenih jezika bolji su za početnike od drugih. Pogledajte naš popis najboljih programskih jezika za početnike. 6 Najlakših programskih jezika za naučiti za početnike 6 Jezici najlakšeg programiranja za učenje za početnike Učenje programa znači pronalaženje pravog jezika jednako koliko i o procesu jedifikacije. Slijedi prvih šest najlakših programskih jezika za početnike. , Primijetit ćete da postoji neki križni presjek između dvaju popisa.