- Pamatidejas
- raksturojums
- Tīras funkcijas
- Pirmās klases funkcijas
- Referenču caurspīdīgums
- Rekursija
- Neizmaināmība
- Piemēri
- Obligāta un deklaratīva pieeja
- Tīras funkcijas
- Funkcijas kā pirmās klases objekti
- Priekšrocība
- Īsāk un vieglāk saprotami
- Nav kontroles plūsmas
- Trūkumi
- Lietojumprogrammas
- Funkcionālā metodika
- Valodas, kas atbalsta funkcionālo programmēšanu
- D
- Erlangs
- Haskell
- ML
- Objektīvais Kamls
- Shēma
- Atsauces
Par funkcionālās programmēšanas rakstam atbilstošu programmu balstās uz koncepciju, norādot uzvedību programmas kā funkcionālu matemātisku modeli, nevis skaidru secību norādījumiem uz procesoru, kas ir galvenais jēdziens imperatīvs programmu.
Funkcionālā valoda uzsver apgalvojumus un terminus, nevis paziņojumus izpilda. Šajā programmēšanā rezultāts būs atkarīgs tikai no parametriem, kas tiek nodoti funkcijai, atšķirībā no citiem veidiem, kas pakļaujas vietējam vai globālajam stāvoklim.
Diagramma, kā kartēšanas funkcija darbojas Haskell funkcionālās programmēšanas valodā. Avots: Autors Pluke - Savs darbs, CC0 commons.wikimedia.org.
Tās nosaukums cēlies no matemātiskajām funkcijām, kas ir ieeju kopas piešķiršana izvadu kopai. Matemātiskā funkcija faktiski neveic nekādu darbu, bet drīzāk apraksta procesa modeli, ar formulas palīdzību izskaidrojot, ko ieeju kopa rada funkcijā.
Pamatidejas
Funkcionālās programmēšanas pamatā bija lambda calculus, kas tika izstrādāts 20. gadsimta trešajā desmitgadē, lai definētu un pielietotu funkcijas. LISP bija pirmā šāda veida programmēšanas valoda, kas tika izstrādāta 1960. gadā.
Lai arī lielāko daļu programmēšanas valodu veido ieejas, izejas un ārējie mainīgie, kurus var iestatīt vai izmantot no funkcijām, funkcionālā programmēšana no tā izvairās. Ideja ir tāda, ka katru reizi, kad tiek izsaukta funkcija ar vieniem un tiem pašiem parametriem, tai vajadzētu atgriezt to pašu vērtību.
raksturojums
Funkcionālās programmēšanas valodas tiek sauktas par lietojumprogrammām, jo funkcijas tiek piemērotas to parametriem, kā arī deklaratīvajām un neprocedurālajām, jo definīcijas norāda, kas jāaprēķina, nevis kā to aprēķina.
Tīras funkcijas
Funkcija ir tīra, ja tai nav novērojamu blakusparādību, piemēram, ārējo mainīgo mainīšana, failu sistēmas izmaiņas utt.
Šīs funkcijas tiek uzskatītas par pārliecinošām, jo tās tieši nemainīs mainīgos lielumus, no kuriem kādā brīdī varētu būt atkarīgas citas koda daļas. Būtu neērti kodēt ar šiem ierobežojumiem, taču šīs funkcijas jāuzskata par deterministiskām, paredzamām un saliekamām.
Pirmās klases funkcijas
Funkcijas tiek uzskatītas par vērtībām, kuras var piešķirt mainīgajiem, tāpēc tās var nodot citām funkcijām un atgriezt no tām. Tas ir, funkciju var izmantot kā parametru vai kā vērtību, kas tiek atgriezta.
Tas nozīmē, ka funkciju var nodot kā tādu, nevis tikai funkcijas rezultātu. Piemēram, apsveriet funkciju dubultā (x), kas divreiz pārsniedz tā ievades parametra vērtību. Tādējādi dubultā (2) atgrieztos 4.
Tā kā tā ir pirmās klases funkcija, kods (dubultā (dubultā (2)) būtu tāds pats kā dubultā (4) kods. Tas ļauj jums ligzdot vienu funkciju kā citas parametru utt.).
Referenču caurspīdīgums
Tas attiecas uz faktu, ka šajā programmēšanas modelī nav neviena piešķiršanas paziņojuma. Tas ir, jums jādefinē jauni mainīgie, ja vēlaties saglabāt papildu vērtības. Tāpēc mainīgā lielums vienmēr ir nemainīgs.
Tas novērš vismazāko nevēlamo seku iespējamību, jo jebkuru mainīgo var jebkurā programmas izpildes vietā aizstāt ar tā reālo vērtību.
Rekursija
Funkcionālajā programmēšanā nav cilpu “par” un “kamēr”. Tā vietā iterācija balstās uz atkārtošanos. Rekursija tiek īstenota, izmantojot rekursīvas funkcijas, kuras sevi sauc atkārtoti, līdz tiek sasniegts pamata gadījums.
Neizmaināmība
Mainīgie nav mainīgi, tas ir, mainīgo nevar modificēt pēc tam, kad tas ir inicializēts. Lai gan jūs varat izveidot jaunu mainīgo, esošo mainīgo modificēšana nav atļauta.
Piemēri
Obligāta un deklaratīva pieeja
Izmantojot piemēru, jūs varat analizēt atšķirību starp šīm pieejām, veicot vienu un to pašu darbību abos izkārtojumos, ti, nepāra skaitļu filtrēšanai no saraksta, aizstājot 5 ar pāra skaitļiem, kas mazāki par 5.
Tas ir viens un tas pats aprēķins, ar vienādu rezultātu. Tomēr, kā redzat, obligātais kods ir precīzs un nav uzreiz skaidrs. No otras puses, deklaratīvā pieeja ir lasāma un skaidra, jo tā koncentrējas uz to, ko vēlaties iegūt.
Tīras funkcijas
To, kas tiek definēts kā tīras un netīras funkcijas, var izskaidrot ar dažiem pamata piemēriem:
Funkcijas kā pirmās klases objekti
Tas nozīmē lietot funkcijas tāpat kā dati. Tādēļ tos kā parametrus var nodot citai funkcijai. Šajā piemērā int funkciju kā parametru var nodot kartes funkcijai:
>>> saraksts (karte (int,))
Tos var piešķirt mainīgajiem un atgriezt. Piemēram, šajā kodā jūs varat piešķirt funkciju hello_world, pēc tam izpildīt mainīgo kā funkciju.
Priekšrocība
- Koncentrējieties uz to, ko vēlaties sasniegt (deklaratīvi), nevis uz to, kā to sasniegt (obligāti).
- Tie nesatur piešķiršanas paziņojumus, tāpēc pēc mainīgajiem tiks piešķirta vērtība, tie vairs nemainīsies. Tāpēc funkcionālās programmas nesatur nekādas blakusparādības.
- Loģiskā plūsma ir skaidra, jo stāvoklis ir mazāk izkliedēts un netieši nav mainīts.
- Atbalsta slinka novērtējuma jēdzienu, kas nozīmē, ka vērtība tiek novērtēta un saglabāta tikai nepieciešamības gadījumā.
- Tā kā tīras funkcijas nemaina nevienu stāvokli un ir pilnībā atkarīgas no ievades, tās ir viegli saprotamas. Šādu funkciju sniegtā atgriešanās vērtība ir tāda pati kā to radītais rezultāts.
- Tīro funkciju rakstura dēļ, lai izvairītos no mainīgo lielumu vai jebkādu ārēju datu maiņas, vienlaicīguma ieviešana stājas spēkā.
- Funkcijas tiek uzskatītas par vērtībām, pārejot uz citām funkcijām kā parametrus. Tas uzlabo koda izpratni un lasāmību.
- Tīras funkcijas parametrus ņem vienu reizi, iegūstot nemainīgu izvadi. Nemaināmu vērtību izmantošana atvieglo atkļūdošanu un testēšanu.
Īsāk un vieglāk saprotami
Tie ir īsāki un vieglāk saprotami nekā obligāti. Pētījumi liecina, ka vidējā programmētāja produktivitāte koda līniju izteiksmē ir gandrīz vienāda ar jebkuru programmēšanas valodu, kas nozīmē augstāku produktivitāti.
Nav kontroles plūsmas
Funkcijas izsaukšanai nevar būt atšķirīgs efekts nekā tās rezultāta aprēķinam. Tas izslēdz galveno kļūdu avotu, padarot izpildes kārtību arī nebūtisku, jo neviena blakusparādība nevar mainīt izteiksmes vērtību un to var novērtēt jebkurā laikā.
Programmētājs ir atbrīvots no kontroles plūsmas nodibināšanas sloga. Tā kā izteiksmes var novērtēt jebkurā laikā, mainīgos var aizstāt ar to vērtībām.
Šī autonomija padara funkcionālās programmas matemātiski vadāmākas nekā parastās programmas.
Trūkumi
- Funkcionālās programmēšanas paradigma nav vienkārša, tāpēc iesācējam to ir grūti saprast.
- To ir grūti uzturēt, jo kodēšanas laikā attīstās daudzi objekti.
- Dažos gadījumos tīru funkciju rakstīšana samazina koda lasāmību.
- Nemainīgas vērtības kombinācijā ar rekursiju var krasi samazināt sistēmas veiktspēju.
- Atkārtota izmantošana ir ļoti sarežģīta un prasa pastāvīgu reakciju.
- Programmu rakstīšana rekursīvā stilā, nevis cilpu vai cilpu izmantošana, var būt ļoti biedējošs uzdevums.
- Objekti, iespējams, nepareizi attēlo problēmu.
- Lai gan tīru funkciju rakstīšana izrādās vienkārša, ir diezgan grūti apvienot tās ar pārējo lietojumprogrammu un ar ievades / izvades darbībām.
Lietojumprogrammas
Mākslīgā intelekta programmēšana tiek veikta funkcionālās programmēšanas valodās, un mākslīgā intelekta metodes migrē uz reālās pasaules lietojumprogrammām.
Tas izceļas arī ar sarežģītu matemātisko modeļu ieviešanu. Šī iemesla dēļ viens no galvenajiem funkcionālo valodu lietojumiem tradicionāli ir bijis akadēmisks. Tas ir noderīgi, lai izstrādātu izpildāmās specifikācijas un prototipu ieviešanu.
Daudzas funkcionālās valodas izceļas arī ar paralēlās apstrādes ieviešanu. Tas ir saistīts ar tā spēju izmantot tīru funkciju priekšrocības, kuras vienmēr atdod to pašu vērtību neatkarīgi no to izpildes secības.
Funkcionālā metodika
WhatsApp izmanto programmēšanas valodu Erlang, kas seko funkcionālā programmēšanas modelim, tādējādi ļaujot vairāk nekā simtam tās darbinieku apstrādāt datus, kas pieder aptuveni 1,6 miljardiem cilvēku.
Vēl viens svarīgs funkcionālā programmēšanas stila nesējs ir Haskell. Facebook to izmanto pretspam sistēmā. Pat JavaScript, viena no visizplatītākajām programmēšanas valodām, raksturo dinamiski tipizētas funkcionālās valodas īpašības.
Valodas, kas atbalsta funkcionālo programmēšanu
D
Tas tika izstrādāts pēc C ++, iegūstot visas priekšrocības, vienlaikus novēršot novērotos trūkumus, kādēļ tam jābūt saderīgam ar C.
Erlangs
Tas ir ļoti mērogojams un vienlaikus, padarot to ideāli piemērotu telekomunikācijām un citām lietojumprogrammām, kas neparedzamā secībā saņem milzīgus datu apjomus.
Haskell
Šī ir tīra funkcionālā programmēšanas valoda, kurā izmantoti Lambda aprēķini.
ML
To izmanto matemātiskos, zinātniskos, finanšu, analītiskos un citos pielietojumos. Viena no tās priekšrocībām ir programmatūras izstrāde, lai apstrādātu citas programmas.
Objektīvais Kamls
Tā ir atvērtā koda valoda, kuras pamatā ir Kamla. Tā mēdz radīt ļoti vieglas programmas, palīdzot tām ielādēt un darboties ātrāk nekā citas valodas.
Shēma
Tas ir balstīts uz LISP sintakse un ALGOL struktūru. Savas vienkāršības dēļ tas tiek izmantots daudzos datorzinātņu kursos kā ievads programmas dizainā, lai parādītu dažus datorprogrammēšanas pamatus.
Atsauces
- Kas to mitina (2019). Apgūstiet funkcionālo programmēšanu: šis kodēšanas stils ienesīs prātu. Iegūts no: whoishostingthis.com.
- Andrea Bertoli (2019). Adekvāts ievads funkcionālā programmēšanā. Nākts no: dev.to.
- Hacker Earth (2020). Funkcionālā programmēšana. Iegūts no: hackerearth.com.
- Klojure (2020). Funkcionālā programmēšana. Paņemts no: clojure.org.
- Akhil Bhadwal (2020). Funkcionālā programmēšana: jēdzieni, priekšrocības, trūkumi un lietojumprogrammas. Kapāt. Ņemts no: hackr.io.
- Guru99 (2020). Kas ir funkcionālā programmēšana? Pamācība ar piemēru. Paņemts no: guru99.com.