Ce este programarea funcțională?
⚡ Rezumat inteligent
Programarea funcțională este o modalitate de a construi software prin compunerea de funcții pure, evitând stările partajate și datele mutabile. Aceasta pune accent pe expresii în detrimentul instrucțiunilor, astfel încât ieșirea unei funcții depinde doar de intrările sale, ceea ce face ca programele să fie previzibile și testabile.
Ce este programarea funcțională?
Programarea funcțională (numită și FP) este o modalitate de a concepe construcția de software prin crearea de funcții pure. Evită conceptele de stare partajată și date mutabile observate în programarea orientată pe obiecte.
Limbajele funcționale pun accentul pe expresii și declarații, mai degrabă decât pe execuția instrucțiunilor. Prin urmare, spre deosebire de alte proceduri care depind de o stare locală sau globală, valoarea generată î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 trebuie calculat.
- Datele sunt imuabile.
- Programarea funcțională descompune problema în funcții.
- Este construit pe conceptul de funcții matematice care utilizează expresii condiționale și recursivitate pentru a efectua calculul.
- Nu acceptă iterații precum instrucțiunile de buclă și instrucțiunile condiționale precum If-Else.
Istoria programării funcționale
- Fundamentul programării funcționale este calculul Lambda. Acesta a fost dezvoltat în anii 1930 pentru aplicații funcționale, definire ș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 - Limbajul Meta).
- La începutul anilor '80, limbajul Hope a adăugat tipuri de date algebrice pentru recursivitate și raționament ecuațional.
- În anul 2004, limbajul funcțional „Scala” a fost inovat.
Limbaje de programare funcționale
Obiectivul oricărui limbaj FP este de a imita funcții 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
Datele imuabile înseamnă că ar trebui să puteți crea cu ușurință structuri de date în loc să le modificați pe cele deja existente.
Transparență referențială
Programele funcționale ar trebui să efectueze operațiuni ca și cum ar fi pentru prima dată. Astfel, veți ști ce s-ar fi putut întâmpla sau nu în timpul execuției programului și efectele sale secundare. În termeni de planificare funcțională, aceasta 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 plus, modulele pot fi testate separat, ceea ce vă ajută să reduceți timpul petrecut cu testarea unitară și depanare.
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 că veți modifica accidental ceva în afara funcției date.
Funcție de primă clasă
„Funcția de primă clasă” este o definiție atribuită entităților din limbajul 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
O închidere este o funcție internă care poate accesa variabilele 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 currying. Această tehnică aplică o funcție argumentelor sale pe rând, fiecare aplicație returnând o nouă funcție 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 sunt eficiente 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
Funcțiile impure sunt exact opusul funcțiilor pure. Au intrări sau ieșiri ascunse și de aceea sunt numite impure. 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
Starea partajată este un concept important în programarea OOP. Practic, este vorba de adăugarea de proprietăți obiectelor. De exemplu, dacă un hard disk este un obiect, capacitatea de stocare și dimensiunea discului pot fi adăugate ca proprietăți.
Efecte secundare
Efectele secundare sunt orice schimbări de stare care apar în afara unei funcții apelate. Cel mai important obiectiv al oricărui limbaj de programare FP este de a minimiza efectele secundare prin separarea lor de restul codului software. În programarea FP, este vital să se elimine efectele secundare din restul logicii de programare.
Beneficiile programării funcționale
- Vă permite să evitați problemele confuze și erorile din cod.
- Testare și executare mai ușoară a testelor unitare și depanare FP Code.
- Procesare paralelă și concurență.
- Implementare de cod fierbinte și toleranță la erori.
- Oferă o modularitate mai bună cu cod mai scurt.
- Productivitate crescută a dezvoltatorului.
- Acceptă 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 programării funcționale nu este ușoară, așadar este dificil de înțeles pentru începători.
- Greu de întreținut, deoarece multe obiecte evoluează în timpul codării.
- Necesită multă batjocură și o configurare extinsă a mediului.
- Reutilizarea este foarte complicată și necesită refactorizare constantă.
- Este posibil ca obiectele să nu reprezinte corect problema.
Programare funcțională vs. Programare orientată pe obiecte
| Programare funcțională | OOP |
|---|---|
| FP folosește date imuabile. | OOP utilizează date modificabile. |
| Urmează un model bazat pe programare declarativă. | Urmează un model de programare imperativă. |
| Pe ce se concentrează este: „Ceea ce faci în cadrul programului”. | Pe ce se concentrează este: „Cum îți faci programarea”. |
| Suporta programare paralela. | Nu există suport pentru programare paralelă. |
| Funcțiile sale nu au efecte secundare. | O metodă 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ă. |
| Suportă ambele tipuri de exerciții „Abdominale”trac„Abs” și „Abs”trac„ția asupra comportamentului.” | Acceptă doar „Abs”trac„țiune asupra datelor”. |


