..


Rėmėjų nuorodos

Funkcinis programavimas Ruby

Straipsnį parašė Alessio Saltarini
Puslapis 1 iš 2

Įvadas

Funkciniai programų (BP) yra programavimo paradigmos alternatyva tradiciniams (struktūrinės ar būtina programavimas ir objektinio programavimo) išrado, kaip "Lambda skaičiavimas" pagal Alonso bažnyčia per 30 metų, gerai, kol ji buvo žinoma, kad ką jis kompiuterio.

Tyrimai Bažnyčios tarnavo kaip už programavimo kalba Lisp vystymosi pagrindas, ir tada jie buvo beveik visiškai atsisakyta, nes jie tvirtino, būtina programavimo kompiuteriams, sukurtas Pagrindinio ir kaip Paskalis, C, ir šiandien šiuolaikinės C + + ir Java.

Pagrindinė idėja lambda skaičiavimas yra tai, kad kompiuterinė programa gali būti išreikštas, o ne privalomas nurodymų (tai padaryti, tada tai padaryti, tada daryti), su serijos funkcijų, kurios parametrai yra tokie patys numeris funkcijas.

Funkcinės programa paprastai yra sudarytas iš funkciją, kuri trunka kaip pirkimo kitos funkcijos, kad mano kitos funkcijos kaip įvesties, ir taip toliau.

Tai reiškia, kad, nors tradicinė programa, parašyta būtina paradigma ar objektus, sudaro komandos, kurios veikia kintamasis, kurio reikšmė yra "valstybės" programos serija, funkcinės programavimo labai samprata kintamasis neegzistuoja (Nėra "valstybės" sąvoka) ir vykdymas pavestas funkcijas, kad veikia pastovi funkcija skaičių.

Funkcinės kalbos palūkanų buvo prarasta bėgant dėl ​​įvairių priežasčių, ypač mokymosi (dažniausiai žmogus galvoja objektų, o ne funkcijas, nebent jis yra matematikas!) Sunkumus ir rasti sunku efektyvus žodžiu arba kompiliatorius.

Ruby ir FP

Šiandien šios palūkanos buvo pažadinti, tačiau, kadangi funkciniai programavimo atneša su juo labai vertingas pasekmė: ji negali iš esmės lemti klaidas run-time. Kitaip tariant, kompiliavimo metu arba pirmą kartą arba jis veikia arba neveikia. Negali elgtis taip, nesitikima, a priori (iš funkcinių programą, iš tiesų, nėra išimtis koncepcija).

Taip gimė ir kai kurie klesti funkcinių kalbų (daugiau ar mažiau gryno, ir su daugiau ar mažiau remti tradicines programavimo), kaip antai: ML / OCaml , Haskell , F # .

Ruby nėra funkcinio kalbos, bet naudoja funkcinius programavimo metodus, kurie gali mums padėti suformuluoti algoritmai daugiau sintetinis, stipresnis ir veiksmingesnis. Be to, paprastai lengviau skaityti.

Kiekvienas ir struktūra

Dėl pirmojo bruožo kalbų, kad parama tam tikru būdu FP, yra turėti savo standartinės bibliotekos iteratory funkcionalus. Pavyzdžiui:






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







 Elementi.map $ {| Elem | iškelia Elem} + 1



Funkcijas "žemėlapį" ir "kiekvienas" Ruby yra nieko daugiau, nei taikomos FP! Iš tiesų yra funkcijų, kurios turi kitų funkcijų, kaip argumentus. Ruby, tada, kad tie kodo blokai uždengtas {} arba tarp Do / pabaigoje anoniminius funkcijų dalis yra pastatytas specialiai skirti temomis daug funkcijų.

Šios funkcijos yra vadinamas BP aukštos kad funkcijų, ty funkcijų, imtis kuo daugiau funkcijų kaip pirkimo.

Visų pirma "žemėlapį" veikia kaip klasikinės ir matematinė funkcija, gali būti taip: už kiekvieną seriją 1-5 elementą, paleisti funkciją: spausdinti Kitas natūralusis skaičius.

Kad "žemėlapis" ar "asocijuotas įmones", už kiekvieną surinkimo elementas (Ruby Array sakytume) tam tikrą funkciją, apibrėžtą blokas.

Tas pats atsitiktų, natūraliai su:

 



 $ Elementi.each {...}

 
Nutraukimas: Proc ir lambda

Uždarymo yra koncepciją, panašią į tą didelį užsakymą funkcijos: gebėjimas nustatyti iš esmės kintamųjų, kurie veikia gyvenimo kontekste skiriasi nuo tos funkcijos (pvz., globalių kintamųjų ir kintamųjų kitų funkcijų) funkciją.

Ruby, galiu rašyti uždaryti naudojant anoniminius funkcijas, kurios gali būti apibrėžtos su raktažodžiais Proc.new arba lambda.

Štai pavyzdys:






 def daugintis (daugiklis)



    



 grįžti lambda {| N | N * daugiklis}







 pabaiga









 per3 = daugyba (3)









 per3.call kelia (3) # => 9







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



Ne visai akivaizdu šiame pavyzdyje aš apibrėžti funkciją "Multiply". Kas yra toks keista ši funkcija? Čia aš tiesiog nenaudoja jokių kintamasis!

Argumentas nėra kintamojo koeficientas yra tiesiog už nuolatinį ar kitą funkciją vietos rezervavimo ženklas.

Tačiau tradicinių programavimo, aš parašyti:






 def daugintis (A, B)



    



 grįžti a * b







 pabaiga









 kelia daugyba (3.3)



Kaip galima matyti, tačiau, aš nustatyti uždarymo naudojant "operatorius" aš vadinu per3, kuri apibrėžia visų daugybos "x3" elgesį. Tada aš vadinu šis operatorius numeris 3. Aš taip pat vadiname tai rekursyviai! Arba jį vadiname, užuot nuolat dėl ​​kitos funkcijos.

Be tradicinių programavimo, tačiau esu priverstas iš anksto apibrėžti kintamųjų sandoryje dalyvaujančių skaičius - taip apribojant dviejų skaičių daugyba - ir, svarbiausia, aš turiu įterpti valstybės koncepcija, skiriant atminties dviejų kintamųjų, kad turi reikšmes, kurias reikia padauginti.

Tos pačios kategorijos ...
E-mokymasis
Ruby ir Ruby on Rails (kurso) Ruby ir Ruby on Rails (kurso)
Sukurti programinę įrangą ir interneto programų su Ruby ir RoR. Nuo 39 €.
Rėmėjų nuorodos