Concepte și terminologie (transformare funcțională)

Această secțiune prezintă conceptele de bază și terminologia transformărilor funcționale pure. Abordarea folosind transformări funcționale pentru a transforma datele generează un cod, care este de obicei mai rapid pentru programarea mai expresiv și mai ușor de depanare și de a menține decât generate folosind programarea imperativă convenționale.







Rețineți că subiectele din această secțiune nu pretind o explicație detaliată a programării funcționale. Dar ele definesc, de asemenea, unele funcții de programare funcționale care fac mai ușor traducerea XML dintr-o formă în alta.

În secțiune, o transformare pur funcțională este determinată de un set de funcții numite funcții pure. Aceasta vă permite să convertiți un set de date structurate de la o formă la alta. Cuvântul "curat" indică faptul că funcțiile permit compoziția. care impune ca acestea să fie următoarele.

Închis. adică trebuie să fie ordonate și reordonate liber, fără a implica părțile rămase ale programului și dependențele lor reciproce. Transformările în rețea nu au nicio idee despre mediul lor și nu o afectează. Cu alte cuvinte, funcțiile utilizate în transformare nu au efecte secundare.

Fără salvarea statului. adică executarea aceleiași funcții sau a unui anumit set de funcții cu aceleași date de intrare va duce întotdeauna la aceleași date de ieșire. Conversiile nete nu sunt conștiente de utilizările anterioare.

Până la sfârșitul acestui tutorial, termenul "funcția pură" este utilizat în primul rând pentru a indica o abordare a programării, mai degrabă decât o caracteristică specială a limbii.

Rețineți că funcțiile pure trebuie implementate ca metode în C # și ca funcții în Visual Basic. (În Visual Basic, rutinele nu pot returna o valoare și prin urmare nu sunt folosite pentru a scrie transformări pur funcționale.)

De asemenea, nu ar trebui să confundați funcțiile pure cu metode pur virtuale în C ++. Cel de-al doilea caz arată că clasa conținută este abstractă, iar textul metodei nu este specificat.

Programarea funcțională

Termenul de programare funcțională se referă la o abordare a programării care sprijină direct transformările pur funcționale.







Din punct de vedere istoric, limbile de programare funcțională de uz general, cum ar fi ML, Scheme, Haskell și F # (dezvoltate de Microsoft Research), au fost principalul interes al comunității academice. În ciuda faptului că a fost întotdeauna posibil să se scrie transformări pur funcționale în C # și Visual Basic, acest lucru nu a devenit o opțiune atractivă pentru majoritatea programatorilor datorită complexității lor. În C # 3.0 și Visual Basic 9.0, cu toate acestea, construcțiile de limbi noi, cum ar fi expresiile lambda și definițiile de tip, au făcut programarea funcțională mult mai ușoară și mai productivă.

Pentru mai multe informații despre programarea funcțională, consultați Compararea programării funcționale și imperative.

Limbi de programare funcțională

În ciuda faptului că principalele limbi ale programării funcționale nu sunt utilizate pe scară largă, limbile de programare funcțională specială sunt mult mai reușite. De exemplu, foile de stil cascadă (CSS) sunt utilizate pentru a defini aspectul multor pagini web, iar transformările XSLT sunt utilizate pe scară largă în procesarea datelor XML. Pentru mai multe informații despre XSLT, consultați Transformările XSLT.

Următoarele tabele definesc câțiva termeni legați de transformările funcționale.

funcția de comandă înaltă (clasa I)

O funcție care poate fi interpretată ca un obiect de program. De exemplu, o funcție de mare ordin poate fi transferată și returnată de alte funcții. În expresiile C # și Visual Basic, expresiile delegate și expresiile lambda sunt componente de limbă care suportă funcții de ordin înalt. Pentru a scrie o funcție de ordin înalt, trebuie să declarați unul sau mai multe argumente pentru acceptarea delegaților, de obicei folosind expresii lambda. Mulți operatori de interogare standard sunt funcții de ordin înalt.

De fapt, este o funcție anonimă încorporată care poate fi utilizată atunci când tipul de delegat este necunoscut. Acesta este un înțeles simplificat al expresiilor lambda, însă este suficient pentru scopurile acestui tutorial.

Un set de date structurat este, de obicei, de tip standard. Pentru a asigura compatibilitatea cu LINQ, colecția trebuie să implementeze interfața IEnumerable sau interfața IQueryable (sau unul dintre principalele lor prototipuri IEnumerator sau IQueryable ).

tuple (tipuri anonime)

Ca concept matematic, o tuplă este o secvență finită de obiecte, fiecare dintr-un anumit tip. O tuplă este numită și o listă ordonată. Tipurile anonime reprezintă o implementare a limbajului acestui concept, care vă permite să declarați o clasă de tip anonim și să creați simultan o instanță a unui obiect de acest tip.

definirea tipului (tastarea ascunsă)

Abilitatea compilatorului de a determina tipul unei variabile în lipsa unei declarații de tip explicite.

întârzierea executării și calculele nesfârșite

Întârzie evaluarea unei expresii până când rezultatul este necesar. În colecții, este acceptată executarea amânată.

Aceste caracteristici de limbă vor fi folosite în eșantioanele de cod din această secțiune.







Articole similare

Trimiteți-le prietenilor: