Programare pur funcțională - Purely functional programming

În informatică , programarea pur funcțională desemnează de obicei o paradigmă de programare - un stil de construire a structurii și elementelor programelor de calculator - care tratează tot calculul ca evaluarea funcțiilor matematice . Purely programare funcțională poate fi , de asemenea , definit prin interzicerea de stat schimbări și mutabil de date.

Programarea pur funcțională constă în asigurarea faptului că funcțiile, în interiorul paradigmei funcționale , vor depinde doar de argumentele lor, indiferent de orice stat global sau local.

Diferența dintre programarea funcțională pură și impură

Diferența exactă între programarea funcțională pură și impură este o problemă de controversă.

Un program se spune de obicei că este funcțional atunci când folosește unele concepte de programare funcțională , cum ar fi funcții de primă clasă și funcții de ordin superior . Cu toate acestea, o funcție de primă clasă nu trebuie să fie pur funcțională, deoarece poate folosi tehnici din paradigma imperativă , cum ar fi matrici sau metode de intrare / ieșire care nu sunt programe pur funcționale. De fapt, cele mai vechi limbaje de programare citate ca fiind funcționale, IPL și Lisp , erau ambele limbaje funcționale „impure” prin definiția actuală.

Structurile de date pur funcționale sunt persistente . Persistența este necesară pentru programarea funcțională; fără el, același calcul ar putea produce rezultate diferite. Programarea funcțională poate utiliza structuri de date persistente, non pur funcționale , în timp ce aceste structuri de date nu pot fi utilizate în programe pur funcționale.

Proprietățile programării pur funcționale

Evaluare strictă versus evaluare non-strictă

Fiecare strategie de evaluare care se încheie cu un program pur funcțional returnează același rezultat. În special, se asigură că programatorul nu trebuie să ia în considerare ordinea în care sunt evaluate programele, deoarece evaluarea dornică va oferi același rezultat ca și evaluarea leneșă . Cu toate acestea, este încă posibil ca o evaluare dornică să nu se încheie în timp ce evaluarea leneșă a aceluiași program se oprește. Un avantaj al acestui lucru este că evaluarea leneșă poate fi implementată mult mai ușor; deoarece toate expresiile vor întoarce același rezultat în orice moment (indiferent de starea programului), evaluarea lor poate fi întârziată atât cât este necesar.

Calcul paralel

Programarea pur funcțională simplifică calculul paralel, deoarece două părți pur funcționale ale evaluării nu interacționează niciodată.

Structuri de date

Structurile de date pur funcționale sunt adesea reprezentate într-un mod diferit de omologii lor imperativi . De exemplu, matricea cu acces și actualizare în timp constant este o componentă de bază a majorității limbajelor imperative și multe structuri de date imperative, cum ar fi tabelul hash și heap-ul binar , se bazează pe tablouri. Tablourile pot fi înlocuite cu o hartă sau o listă de acces aleatoriu , care admite implementarea pur funcțională, dar timpul de acces și actualizare este logaritmic . Prin urmare, structurile de date pur funcționale pot fi utilizate în limbi nefuncționale, dar pot să nu fie cel mai eficient instrument disponibil, mai ales dacă nu este necesară persistența.

În general, conversia unui program imperativ la unul pur funcțional necesită, de asemenea, asigurarea faptului că structurile anterior mutabile sunt acum returnate în mod explicit din funcțiile care le actualizează, o structură a programului numită stil de trecere la magazin .

Limbaj pur funcțional

Un limbaj pur funcțional este un limbaj care admite doar programare pur funcțională. Cu toate acestea, programele pur funcționale pot fi scrise în limbi care nu sunt pur funcționale.

Referințe