Ievads
Funkcionālā programmēšana ir programmēšanas paradigma, kurā mēs cenšamies visu saistīt tīrā matemātisko funkciju stilā. Tas ir deklaratīvs programmēšanas stila veids. Tā galvenā uzmanība tiek pievērsta tam, ko atrisināt, atšķirībā no imperatīvā stila, kurā galvenā uzmanība tiek pievērsta tam, kā atrisināt. Tas izmanto izteiksmes, nevis paziņojumus. Izteiksme tiek novērtēta, lai iegūtu vērtību, savukārt paziņojums tiek izpildīts, lai piešķirtu mainīgos. Šīm funkcijām ir dažas īpašas funkcijas, kas aplūkotas turpmāk.
Funkcionālās programmēšanas pamatā ir Lambda aprēķini:
Lambda aprēķini ir Alonzo Church izstrādāta sistēma, lai pētītu aprēķinus ar funkcijām. To var saukt par mazāko programmēšanas valodu pasaulē. Tas sniedz definīciju tam, kas ir aprēķināms. Viss, ko var aprēķināt ar lambda aprēķiniem, ir aprēķināms. Tas ir līdzvērtīgs Tjūringa mašīnai ar savām spējām aprēķināt. Tas nodrošina teorētisko ietvaru funkciju aprakstīšanai un to novērtēšanai. Tas veido gandrīz visu pašreizējo funkcionālo programmēšanas valodu pamatu.
Fakts: Alans Tjūrings bija Alonzo Čērčas students, kurš izveidoja Tjūringa mašīnu, kas lika pamatus obligātajam programmēšanas stilam.
Programmēšanas valodas, kas atbalsta funkcionālo programmēšanu: Haskell, JavaScript, Python, Scala, Erlang, Lisp, ML, Clojure, OCaml, Common Lisp, Racket.
ja vēl ja vēl ja java
Funkcionālās programmēšanas jēdzieni:
- Tīras funkcijas
- Rekursija Atsauces caurspīdīguma funkcijas ir pirmās klases un var būt augstākas kārtas mainīgie ir nemainīgi
Tīras funkcijas: Šīm funkcijām ir divas galvenās īpašības. Pirmkārt, tie vienmēr rada vienu un to pašu rezultātu vieniem un tiem pašiem argumentiem neatkarīgi no visa cita.
Otrkārt, tiem nav blakus efektu, t.i., tie nemaina nekādus argumentus vai lokālos/globālos mainīgos vai ievades/izvades plūsmas.
Vēlāko īpašumu sauc par nemainīgumu. Tīrās funkcijas vienīgais rezultāts ir vērtība, ko tā atgriež. Tie ir deterministiski.
Programmas, kas izveidotas, izmantojot funkcionālo programmēšanu, ir viegli atkļūdojamas, jo tīrajām funkcijām nav blakusefektu vai slēptu I/O. Tīras funkcijas arī atvieglo paralēlu/vienlaicīgu lietojumprogrammu rakstīšanu. Kad kods ir rakstīts šādā stilā, viedais kompilators var veikt daudzas lietas — tas var paralēli instrukcijas, gaidīt, lai novērtētu rezultātus, kad tie ir nepieciešami, un iegaumēt rezultātus, jo rezultāti nekad nemainās, kamēr nemainās ievade.
tīrās funkcijas piemērs:
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>
Rekursija: Funkcionālajās valodās nav cilpas for vai while. Iterācija funkcionālajās valodās tiek īstenota ar rekursijas palīdzību. Rekursīvās funkcijas atkārtoti izsauc sevi, līdz tās sasniedz bāzes gadījumu.
rekursīvās funkcijas piemērs:
fib(n) if (n <= 1) return 1; else return fib(n - 1) + fib(n - 2);>
Atsauces caurspīdīgums: Funkcionālajās programmās vienreiz definētie mainīgie nemaina to vērtību visā programmā. Funkcionālajām programmām nav piešķiršanas paziņojumu. Ja mums ir jāsaglabā kāda vērtība, tā vietā mēs definējam jaunus mainīgos. Tas novērš jebkādu blakusparādību iespējamību, jo jebkuru mainīgo var aizstāt ar tā faktisko vērtību jebkurā izpildes brīdī. Jebkura mainīgā stāvoklis ir nemainīgs jebkurā brīdī.
Piemērs:
x = x + 1 // this changes the value assigned to the variable x. // So the expression is not referentially transparent.>
Funkcijas ir pirmās klases un var būt augstākas pakāpes: Pirmās klases funkcijas tiek uzskatītas par pirmās klases mainīgajiem. Pirmās klases mainīgos var nodot funkcijām kā parametru, tos var atgriezt no funkcijām vai saglabāt datu struktūrās. Augstākas kārtas funkcijas ir funkcijas, kas izmanto citas funkcijas kā argumentus, un tās var arī atgriezt funkcijas.
pārvēršot virkni par int
Piemērs:
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> Mainīgie lielumi ir nemainīgi: Funkcionālajā programmēšanā mēs nevaram modificēt mainīgo pēc tā inicializācijas. Mēs varam izveidot jaunus mainīgos, taču mēs nevaram mainīt esošos mainīgos, un tas patiešām palīdz saglabāt stāvokli visā programmas izpildes laikā. Kad esam izveidojuši mainīgo un iestatījuši tā vērtību, mēs varam pilnībā pārliecināties, ka šī mainīgā vērtība nekad nemainīsies.
Funkcionālās programmēšanas priekšrocības un trūkumi
Priekšrocības:
- Tīras funkcijas ir vieglāk saprast, jo tās nemaina nekādus stāvokļus un ir atkarīgas tikai no tām piešķirtās ievades. Neatkarīgi no viņu saražotās produkcijas ir viņu atdeves vērtība. Viņu funkcijas paraksts sniedz visu informāciju par tiem, t.i., to atgriešanas veidu un argumentus.
- Funkcionālo programmēšanas valodu spēja traktēt funkcijas kā vērtības un nodot tās funkcijām kā parametrus, padara kodu lasāmāku un vieglāk saprotamu.
- Testēšana un atkļūdošana ir vienkāršāka. Tā kā tīrās funkcijas ņem tikai argumentus un rada izvadi, tās neveic nekādas izmaiņas, neņem ievadi vai rada slēptu izvadi. Tie izmanto nemainīgas vērtības, tāpēc ir vieglāk pārbaudīt dažas problēmas programmās, kas rakstītas, izmantojot tīras funkcijas.
- To izmanto, lai ieviestu vienlaicību / paralēlismu, jo tīrās funkcijas nemaina mainīgos vai citus datus ārpus tā.
- Tā pieņem slinku novērtēšanu, kas ļauj izvairīties no atkārtotas novērtēšanas, jo vērtība tiek novērtēta un saglabāta tikai tad, kad tā ir nepieciešama.
Trūkumi:
pārveidot virkni par int
- Dažreiz tīru funkciju rakstīšana var samazināt koda lasāmību.
- Programmu rakstīšana rekursīvā stilā cilpu izmantošanas vietā var būt nedaudz biedējoša.
- Tīras funkcijas ir viegli rakstīt, taču to apvienošana ar pārējām lietojumprogrammām un I/O operācijām ir sarežģīts uzdevums.
- Nemainīgas vērtības un rekursija var izraisīt veiktspējas samazināšanos.
Lietojumprogrammas:
- To izmanto matemātiskajos aprēķinos.
- Tas ir vajadzīgs tur, kur nepieciešama sakritība vai paralēlisms.
Fakts: Whatsapp 900 M ir nepieciešami tikai 50 inženieri lietotājiem jo Erlang tiek izmantots, lai īstenotu savas vienlaicības vajadzības. Facebook savā pretsurogātpasta sistēmā izmanto Haskell.