Programare procedurala vs

Salut,

Poate cineva sa explice clar care e diferenta dintre programarea procedurala si…programare functionala?
Presupun ca asta este opusul.

1 Like

Opusul programării procedurale este cea clasică (adică bazată pe clase; OOP).

1 Like


Sau

In ziua de astazi paradigmele s-au cam amestecat
Poti scrie functional si in C#, JS, Java si chiar C++

Programarea procedurala este specifica limbajelor C, COBOL, Pascal. Apel de proceduri. Toate procesoarele au registri si stive,

Limbaje pur functionale sunt Haskel, Lisp etc. Programarea functionala poate fi asociata cu concepte matematice precum functii
f(x)

Surprinzator, dar prima forma de programare, am impresia ca a fost cea functionala. :slight_smile:

Paradigmele au aparut si au evoluat o data cu progresul tehnicii de calcul.

Lisp e multi-paradigma. Poti sa scrii cod functional daca vrei, dar nu esti obligat. https://letoverlambda.com/index.cl/guest/chap5.html Bineinteles ca merge si obiectual: https://en.wikipedia.org/wiki/Common_Lisp_Object_System

1 Like

Nu ma interesau neaparat liste de limbaje functionale…aia am gasit-o deja pe wikipedia

Nu am dat nici o lista, am comentat relativ la un singur limbaj. Acum, ca tot iti raspund tie:

Esenta programarii functionale e sa folosesti functii, ca in matematica. Nu ai ‘side effects’, nu exista conceptul de ‘stare’ (ca in ‘stare locala’, ‘stare globala’ sau ‘obiect’ - in sensul de obiect mutabil), nu modifici nimic, functia e functie, in sensul ca valoarea (valorile) returnata (te) depind doar de argumente si nu face nimic altceva decat sa calculeze din intrari, iesirea (ile). E mult mai usor sa programezi asa, nu trebuie sa tii cont de tot felul de modificari legate de apelul functiei. Multi-threadingul se implementeaza mult mai usor. Usurinta asta insa vine cu penalizari importante in performata si flexibilitate.

3 Likes

Programarea procedurala este progamarea imperativa. La fiecare linie ii transmiti calculatorului o instructiune pe care sa o execute. Avantajul e ca poate produce programe foarte bine optimizate. Dezavantajul e ca sunt greu de mentinut si de rationat cu privire la respectivele programe.
In mare, programarea functionala este declarativa, in sensul ca nu-i spui calculatorului cum sa face. Ii spui ce sa faca. Modul in care respectivele actiuni ajung sa fie executate nu este relevant ci e un detaliu de implementare.
Functii ai in toate tipurile de programare, dar a avea functii, nu inseamna ca ai un program functional, pentru ca e mai mult vorba de cum te adaptezi la o filosofie. Modul de gandire e cel care face un program sa poata fi categorisit ca fiind procedural, oop sau functional. Desigur, sunt aspecte care se intrepatrund si elemente din fiecare paradigma sunt folosite in celelalte. Mai putin in limbajele pur functionale, gen Haskel, in care nu prea ai cum, decat sa folosesti modul de gandire functional.

In programarea functionala se pune mare accent pe compozitia functiilor si utilizarea functiilor pure, adica functii care dau acelas rezultat pentru acelas parametru, fara a avea alte efecte. Principiul asta e foarte bun de utilizat si atunci cand faci OOP, insa e esential in programarea functionala.

Un alt aspect important, care nu e intotdeauna fortat de toate limbajele functionale, tine de modul in care datele pot sau nu sa fie modificate. In limbajele pure, datele sunt imutabile. Aceasta proprietate garanteaza consistenta datelor si evita foarte multe buguri.

Un avantaj mare al programarii functionale este ca folosind numai functii pure, e foarte usor de paralelizat. Asigura independenta de timp a functiilor. Cata vreme chemi o functie cu un set de argumente, ai mereu acelasi rezultat, de aceea paralelizarea e mult mai usor de obtinut.

Pe tema asta sunt multe de zis… dar cam astea mi se par chestiile de baza.
Edit:

Mai bine urmaresti chestiile astea si o sa ai o idee mai clara.

Am dat pe Today Software Magazine de aceste 2 articole care mi s-au părut interesante