..


Sponzorirani linkovi

Funkcionalna Programiranje u Ruby

Članak napisao Alessio Saltarini
Stranica 1 od 2

Uvod

Funkcionalne programiranje (FP) je alternativa programiranje paradigme na tradicionalne (ili strukturne imperativ programiranje i objektno-orijentirano programiranje) izumio, kao "lambda račun" od Alonso Crkva u 30 godina, i prije nego što je poznato da točno ono što računalo.

Studije Crkve poslužio je kao osnova za razvoj jezika Lisp programski, a zatim su gotovo u potpunosti napuštene, što je potvrdilo imperativ programiranje računalo da generira Basic i Pascal kao, C, a danas moderne C + + i Java.

Osnovna ideja lambda račun je da računalni program može izraziti, umjesto obveznog skup uputa (to, onda to učinite, tada to), s nizom funkcija čiji parametri su mnogi funkcija.

Funkcionalna programa obično se sastoji od funkcija koja uzima kao ulaz još jedna funkcija koja uzima drugu funkciju kao ulazni, i tako dalje.

To znači da, dok tradicionalni program, napisan u imperativ paradigmu ili objekata, sastoji se od niza naredbi koje djeluju na varijablu čija je vrijednost predstavlja "državu" programa, u funkcionalnom programiranju pojam varijable ne postoji (nema pojma "država"), a izvršavanje je povjereno niz funkcija koje djeluju na konstantnu funkciju.

Interes u funkcionalnim jezicima je izgubio tijekom vremena iz nekoliko razloga, od kojih su najpoznatiji poteškoća učenja (obično čovjek misli objekata, nego funkcije, osim ako je matematičar!) I poteškoće u pronalaženju učinkovit prevodioce ili tumača.

Ruby i FP

Danas, to je kamata probudila, međutim, jer funkcionalne programiranje sa sobom nosi posljedica vrlo vrijedne: ne može po definiciji rezultat u vrijeme izvođenja bugova. Drugim riječima, u vrijeme prevođenja ili prvi put ili se to radi ili ne radi. Ne mogu ponašati na način koji ne mogu predvidjeti unaprijed (u funkcionalnom programu, u stvari, ne postoji pojam iznimka).

Tako su rođeni, a neke su uspješan funkcionalni jezici (više ili manje čista, i sa više ili manje potpora tradicionalnim programiranje), kao što su: ML / OCaml , Haskell , F # .

Ruby nije funkcionalan jezik, ali koristi neke funkcionalne tehnike programiranja koje nam može pomoći da se algoritmi više sintetička, više moćan i učinkovitiji. Osim toga, općenito, lakše za čitanje.

Svaki i karta

Prva karakteristika jezika koji podržavaju na neki način FP je imati u svom standardne biblioteke funkcionalne iterators. Na primjer:






 $ Elementi = [1,2,3,4,5]







 $ Elementi.map {| ELEM | stavlja ELEM + 1}



Funkcija "karta" i "svaki" Ruby nisu ništa više od FP primjenjuje! U stvari postoje funkcije koje imaju i druge funkcije kao argumenti. U Ruby, dakle, da su dijelovi blokova koda zatvorene u {} ili između ne / kraj anonimne funkcije izgrađena posebno za predmete mnoge funkcije.

Ove funkcije su pozvani u FP visokog reda funkcija, tj. funkcija koje se što je više funkcija kao ulaz.

Osobito "karta" djeluje kao klasične i matematičke funkcije mogu se i glasi: za svaki element niza jedan do pet, pokrenite funkciju: Ispisuje sljedeći prirodni broj.

To je "karta" ili "suradnici", za svaki element zbirke (polje u Ruby će reći) određene funkcije definirane u bloku.

Ista stvar će se dogoditi prirodno:

 



 $ Elementi.each {...}

 
Zatvarači: Proc i Lambda

Zatvaranja koncept sličan onome visokog reda funkcija: sposobnost da se znatno definirati funkciju da djeluje na varijable koje žive u kontekstu razlikuje se od funkcije (kao što su globalne varijable ili funkcije drugih varijabli).

U Ruby, mogu napisati zatvaranje pomoću anonimne funkcije koje se može definirati s ključnim riječima Proc.new ili lambda.

Evo primjer:






 konačni množenja (multiplikator)



    



 povratak lambda {| n | n * multiplikator}







 kraj









 per3 = množenja (3)









 per3.call stavlja (3) # => 9







 stavlja per3.call (per8.call (2)) # => 48



U ovom primjeru, a ne samo funkcije zovem očita "množenja". Što je tako čudno ovu funkciju? Ovdje sam jednostavno ne koristiti varijablu!

Argument nije varijabla multiplikator je jednostavno rezervirano za stalno ili funkciju.

No, u tradicionalnim programiranje, ja bih pisati:






 def množiti (a, b)



    



 povratak * b







 kraj









 stavlja množenja (3.3)



Kao što se može vidjeti, međutim, koristeći zatvaranje ja zovem "operater" Pozivam per3, koji definira ponašanje svih množenja "x3". Tada sam to nazivamo operator broj 3. Čak sam ga nazvati rekurzivno! Ili ga nazovite, umjesto stalno, na drugom funkciju.

U tradicionalnim programiranje, međutim, ja sam prisiljen definirati priori broj varijabli uključenih u transakciju - čime se ograničava razmnožavanje dva broja - i, najvažnije, ja sam za umetanje koncept države, dodjele memorije za dvije varijable koje sadrže vrijednosti koje će se množi.

U istoj kategoriji ...
E-učenje
Ruby i Ruby On šina (tečaj) Ruby i Ruby On šina (tečaj)
Izrada softvera i web aplikacija uz Ruby i ROR. Počevši od 39 €.
Sponzorirani linkovi