Ce este programarea funcțională? Tutorial cu Exemplu
Ce este programarea funcțională?
Programarea funcțională (numită și FP) este un mod de a gândi construcția de software prin crearea de funcții pure. Evită conceptele de stare partajată, date mutabile observate în programarea orientată pe obiecte.
Limbajele funcționale se referă la expresii și declarații mai degrabă decât la execuția declarațiilor. Prin urmare, spre deosebire de alte proceduri care depind de o stare locală sau globală, valoarea rezultată în FP depinde doar de argumentele transmise funcției.
Caracteristicile programării funcționale
- Metoda de programare funcțională se concentrează pe rezultate, nu pe proces
- Accentul este pus pe ceea ce urmează să fie calculat
- Datele sunt imuabile
- Programare funcțională Descompuneți problema în „funcții
- Este construit pe conceptul de funcții matematice care utilizează expresii condiționate și recursivitate pentru a efectua calculul.
- Nu acceptă iterații precum instrucțiunile buclei și instrucțiunile condiționate precum If-Else
Istoria programării funcționale
- Fundamentul pentru programarea funcțională este Calculul Lambda. A fost dezvoltat în anii 1930 pentru aplicarea funcțională, definiție și recursivitate
- LISP a fost primul limbaj de programare funcțional. McCarthy l-a proiectat în 1960
- La sfârșitul anilor '70, cercetătorii de la Universitatea din Edinburgh au definit ML (Meta Language)
- La începutul anilor 80, limbajul Hope adaugă tipuri de date algebrice pentru recursivitate și raționament ecuațional
- În anul 2004 Inovarea limbajului funcțional „Scala”.
Limbaje de programare funcționale
Obiectivul oricărui limbaj FP este de a imita funcțiile matematice. Cu toate acestea, procesul de bază al calculului este diferit în programarea funcțională.
Iată câteva dintre cele mai importante limbaje de programare funcțională:
- Haskell
- SML
- Clojure
- Scala
- erlang
- Curat
- F#
- ML/OCaml Lisp / Scheme
- XSLT
- SQL
- Mathematica
Terminologia de bază de programare funcțională și Concepts
Date imuabile
Date imuabile înseamnă că ar trebui să puteți crea cu ușurință structuri de date în loc să le modificați pe cele care există deja.
Transparență referențială
Programele funcționale ar trebui să efectueze operațiuni ca și cum ar fi pentru prima dată. Deci, veți ști ce s-ar putea întâmpla sau nu în timpul execuției programului și efectele secundare ale acestuia. În termenul FP se numește transparență referențială.
modularitate
Designul modular crește productivitatea. Modulele mici pot fi codificate rapid și au șanse mai mari de reutilizare, ceea ce duce cu siguranță la o dezvoltare mai rapidă a programelor. În afară de aceasta, modulele pot fi testate separat, ceea ce vă ajută să reduceți timpul petrecut cu testarea unitară și depanarea.
mentenabilitate
Mentenabilitatea este un termen simplu care înseamnă că programarea FP este mai ușor de întreținut, deoarece nu trebuie să vă faceți griji cu privire la schimbarea accidentală a ceva în afara funcției date.
Funcție de primă clasă
„Funcția de primă clasă” este o definiție, atribuită entităților limbajului de programare care nu au nicio restricție privind utilizarea lor. Prin urmare, funcțiile de primă clasă pot apărea oriunde în program.
Închidere
Închiderea este o funcție internă care poate accesa variabile ale funcției părinte, chiar și după ce funcția părinte a fost executată.
Funcții de ordin superior
Funcțiile de ordin superior fie iau alte funcții ca argumente, fie le returnează ca rezultate.
Funcțiile de ordin superior permit aplicații parțiale sau curry. Această tehnică aplică o funcție argumentelor sale unul câte unul, deoarece fiecare aplicație returnează o funcție nouă care acceptă următorul argument.
Funcție pură
O „funcție pură” este o funcție ale cărei intrări sunt declarate ca intrări și niciuna dintre ele nu trebuie ascunsă. Ieșirile sunt, de asemenea, declarate ca ieșiri.
Funcțiile pure acționează asupra parametrilor lor. Nu este eficient dacă nu returnează nimic. Mai mult, oferă aceeași ieșire pentru parametrii dați
Exemplu:
Function Pure(a,b) { return a+b; }
Funcții impure
Impurul funcționează exact în opusul purului. Au intrări sau ieșiri ascunse; se numeste impur. Funcțiile impure nu pot fi utilizate sau testate izolat, deoarece au dependențe.
Exemplu
int z; function notPure(){ z = z+10; }
Compoziția funcției
Compoziția funcției combină 2 sau mai multe funcții pentru a crea una nouă.
State partajate
Stările partajate este un concept important în programarea OOP. Practic, este adăugarea de proprietăți la obiecte. De exemplu, dacă un harddisk este un obiect, capacitatea de stocare și dimensiunea discului pot fi adăugate ca proprietăți.
Efecte secundare
Efectele secundare sunt orice modificări de stare care apar în afara unei funcții numite. Cel mai mare obiectiv al oricărui limbaj de programare FP este de a minimiza efectele secundare, separându-le de restul codului software. În programarea FP Este vital să eliminați efectele secundare din restul logicii de programare.
Beneficiile programării funcționale
- Vă permite să evitați problemele confuze și erorile din cod
- Mai ușor de testat și executat Testarea unitară și depanarea codului FP.
- Procesare paralelă și concurență
- Implementarea codului fierbinte și toleranța la erori
- Oferă o modularitate mai bună cu un cod mai scurt
- Productivitate crescută a dezvoltatorului
- Suportă funcții imbricate
- Construcții funcționale precum Lazy Map & Lists etc.
- Permite utilizarea eficientă a calculului Lambda
Limitările programării funcționale
- Paradigma de programare funcțională nu este ușoară, așa că este greu de înțeles pentru începător
- Greu de întreținut deoarece multe obiecte evoluează în timpul codării
- Necesita o mulțime de batjocură și o configurație extinsă de mediu
- Reutilizarea este foarte complicată și necesită refactorizare constantă
- Este posibil ca obiectele să nu reprezinte problema corect
Programare funcțională vs. Programare orientată pe obiecte
Programare funcțională | OOP |
---|---|
FP folosește date imuabile. | OOP utilizează date modificabile. |
Urmează modelul bazat pe programarea declarativă. | Urmează modelul de programare imperativ. |
Pe ce se concentrează este: „Ceea ce faci. în program.” | Ceea ce se concentrează este pe „Cum îți faci programarea”. |
Suporta programare paralela. | Nu există suport pentru programarea paralelă. |
Funcțiile sale nu au efecte secundare. | Metoda poate produce multe efecte secundare. |
Controlul fluxului se realizează folosind apeluri de funcție și apeluri de funcție cu recursivitate. | Procesul de control al fluxului se desfășoară folosind bucle și instrucțiuni condiționate. |
Ordinea de executare a declarațiilor nu este foarte importantă. | Ordinea de executare a declarațiilor este importantă. |
Acceptă atât „Abstracție peste date”, cât și „Abstracție peste comportament”. | Acceptă doar „Abstracție peste date”. |
Concluzie
- Programarea funcțională sau FP este un mod de a gândi construcția de software bazat pe câteva principii definitorii fundamentale
- Conceptele de programare funcțională se concentrează pe rezultate, nu pe proces
- Obiectivul oricărui limbaj FP este de a imita funcțiile matematice
- Unele cele mai proeminente limbaje de programare funcționale: 1)Haskell 2)SM 3) Clojure 4) Scala 5) Erlang 6) Clean
- O „funcție pură” este o funcție ale cărei intrări sunt declarate ca intrări și niciuna dintre ele nu trebuie ascunsă. Ieșirile sunt, de asemenea, declarate ca ieșiri.
- Date imuabile înseamnă că ar trebui să puteți crea cu ușurință structuri de date în loc să le modificați pe cele care există deja
- Vă permite să evitați problemele confuze și erorile din cod
- Codul funcțional nu este ușor, deci este greu de înțeles pentru începător
- FP folosește date imuabile, în timp ce OOP utilizează date modificabile