- Mga pangunahing ideya
- katangian
- Puro function
- Mga tampok ng unang-klase
- Referential transparency
- Libangan
- Kawalang-kilos
- Mga halimbawa
- Malapit at deklaratibong pamamaraan
- Puro function
- Mga function bilang mga first-class na bagay
- Kalamangan
- Mas maikli at mas madaling maunawaan
- Walang daloy ng control
- Mga Kakulangan
- Aplikasyon
- Functional na pamamaraan
- Mga wika na sumusuporta sa functional programming
- D
- Erlang
- Haskell
- ML
- Layunin Caml
- Scheme
- Mga Sanggunian
Ang functional programming ay tumutugma sa programming pattern ay batay sa konsepto ng pagsasabi ng pag-uugali ng isang programa bilang isang pagganap na modelo ng matematika sa halip na tahasang mga pagkakasunud-sunod ng mga tagubilin sa isang processor, na siyang pangunahing konsepto sa napakahalagang programming.
Ang pag-andar ng wika ay binibigyang diin ang mga pahayag at termino sa halip na isinasagawa ang mga pahayag. Sa programming na ito, ang resulta ay depende lamang sa mga parameter na naipasa sa isang function, hindi katulad ng iba pang mga uri na sumusunod sa isang lokal o pandaigdigang estado.
Diagram ng kung paano gumana ang pag-andar ng pagmamapa sa Haskell functional programming language. Pinagmulan: Ni Pluke - Sariling gawain, CC0 commons.wikimedia.org.
Ang pangalan nito ay nagmula sa mga pag-andar sa matematika, na kung saan ay ang pagtatalaga ng isang hanay ng mga input sa isang hanay ng mga output. Ang isang pag-andar sa matematika ay hindi aktwal na gumagawa ng anumang gawain, ngunit sa halip ay naglalarawan ng modelo ng isang proseso, na nagpapaliwanag sa pamamagitan ng isang pormula kung ano ang ginagawa ng isang hanay ng mga input sa isang function.
Mga pangunahing ideya
Ang pundasyon kung saan nakabatay ang functional programming ay ang calculus ng lambda, na binuo noong ikatlong dekada ng ika-20 siglo upang tukuyin at ilapat ang mga function. Ang LISP ay ang unang wika ng programming ng uri nito, na idinisenyo noong 1960.
Bagaman ang karamihan sa mga wika ng programming ay binubuo ng mga input, output, at panlabas na variable na maaaring mai-configure o magamit mula sa loob ng mga pag-andar, iniiwasan ito ng functional programming. Ang ideya ay sa bawat oras na ang isang function ay tinatawag na may parehong mga parameter, dapat itong ibalik ang parehong halaga.
katangian
Ang mga wikang function ng programming ay tinatawag na mga aplikasyon, dahil ang mga pag-andar ay inilalapat sa kanilang mga parameter, pati na rin ang deklarasyon at di-pamamaraan, dahil tinukoy ng mga kahulugan kung ano ang dapat kalkulahin at hindi kung paano ito kinakalkula.
Puro function
Ang isang function ay dalisay kapag wala itong napapansin na mga epekto, tulad ng pagpapalit ng mga panlabas na variable, pagbabago ng system system, at iba pa.
Ang mga pagpapaandar na ito ay itinuturing na nakakumbinsi dahil hindi nila malinaw na baguhin ang anumang mga variable na maaaring depende sa iba pang mga punto ng ibang mga bahagi ng code. Mukhang hindi awkward sa code sa mga paghihigpit na ito, ngunit ang mga pag-andar na ito ay dapat isaalang-alang na maging deterministic, mahuhulaan, at composable.
Mga tampok ng unang-klase
Ang mga tungkulin ay itinuturing bilang mga halaga na maaaring italaga sa mga variable, kaya maaari itong maipasa at ibalik mula sa iba pang mga pag-andar. Iyon ay, ang isang function ay maaaring magamit bilang kung ito ay isang parameter o bilang isang halaga na ibabalik.
Ito ay nagpapahiwatig na ang pag-andar ay maaaring maipasa tulad, sa halip na bunga lamang ng pag-andar. Halimbawa, isaalang-alang ang pag-andar ng dobleng (x), na ibabalik ng dalawang beses ang halaga ng parameter ng input nito. Sa gayon, ang doble (2) ay babalik 4.
Dahil ito ay isang function ng unang klase, ang code (doble (doble (2)) ay magiging kapareho ng dobleng (4) na code. Pinapayagan ka nitong mag-pugad ng isang function bilang isang parameter ng isa pa, at iba pa.
Referential transparency
Tumutukoy ito sa katotohanan na sa ganitong pattern pattern ay walang mga pahayag sa pagtatalaga. Iyon ay, dapat mong tukuyin ang mga bagong variable kung nais mong mag-imbak ng mga karagdagang halaga. Samakatuwid, ang estado ng isang variable ay pare-pareho sa lahat ng oras.
Tinatanggal nito ang bahagyang posibilidad ng mga hindi kanais-nais na mga epekto, dahil ang anumang variable ay maaaring mapalitan ng tunay na halaga nito sa anumang punto ng pagpapatupad ng programa.
Libangan
Sa functional na programming walang "para" at "habang" mga loop. Sa halip, ang pag-iilaw ay nakasalalay sa pag-urong. Ang pag-urong ay ipinatupad gamit ang mga pag-andar ng recursive, na tinatawag ang kanilang mga sarili na paulit-ulit hanggang sa maabot ang base case.
Kawalang-kilos
Ang mga variable ay hindi nababago, iyon ay, hindi posible na baguhin ang isang variable sa sandaling ito ay na-pasiyaman. Bagaman maaari kang lumikha ng isang bagong variable, hindi pinapayagan ang pagbabago ng umiiral na mga variable.
Mga halimbawa
Malapit at deklaratibong pamamaraan
Sa pamamagitan ng isang halimbawa maaari mong pag-aralan ang pagkakaiba sa pagitan ng mga pamamaraang ito, gumaganap ng parehong operasyon sa parehong pag-aayos, na kung saan ay upang salain ang kakaibang mga numero mula sa isang listahan habang ang paghalili ng 5 para sa kahit na mga numero na mas mababa sa 5.
Ito ay ang parehong pagkalkula, na may parehong resulta. Gayunpaman, tulad ng nakikita mo, ang kinakailangang code ay walang saysay at hindi agad malinaw. Sa kabilang banda, ang diskarte sa pagpapahayag ay mababasa at malinaw, sapagkat nakatuon ito sa nais mong makuha.
Puro function
Ano ang tinukoy bilang dalisay at hindi wastong mga pag-andar ay maaaring linawin sa ilang pangunahing mga halimbawa:
Mga function bilang mga first-class na bagay
Nangangahulugan ito na gumamit ng mga pag-andar sa parehong paraan na ginagamit ang data. Samakatuwid, maaari silang maipasa bilang mga parameter sa isa pang pag-andar. Sa sumusunod na halimbawa, ang int function ay maaaring maipasa bilang isang parameter sa pagpapaandar ng mapa:
>>> listahan (mapa (int,))
Maaari silang italaga sa mga variable at bumalik. Halimbawa, sa sumusunod na code maaari kang magtalaga ng function na hello_world, pagkatapos ay isagawa ang variable bilang isang function.
Kalamangan
- Tumutok sa nais mong makamit (pagpapahayag) at hindi sa kung paano makamit ito (kinakailangan).
- Hindi sila naglalaman ng mga pahayag sa pagtatalaga, kaya pagkatapos mabigyan ng halaga ang mga variable, hindi na sila magbabago. Samakatuwid, ang mga functional na programa ay hindi naglalaman ng anumang mga epekto.
- Ang lohikal na daloy ay malinaw, dahil ang estado ay hindi gaanong kalat at hindi tahasang binago.
- Sinusuportahan ang konsepto ng tamad na pagsusuri, na nangangahulugang ang halaga ay nasuri at nakaimbak lamang kung kinakailangan.
- Dahil ang mga dalisay na pag-andar ay hindi nagbabago ng anumang estado at ganap na umaasa sa input, madali silang maunawaan. Ang halaga ng pagbabalik na ibinigay ng naturang mga pag-andar ay pareho sa resulta na ginawa ng mga ito.
- Dahil sa likas na katangian ng dalisay na pag-andar upang maiwasan na ang mga variable o anumang panlabas na pagbabago ng data, ang pagpapatupad ng pagkakasabay ay nagiging epektibo.
- Ang mga pagpapaandar ay itinuturing bilang mga halaga, na ipinapasa sa iba pang mga pag-andar bilang mga parameter. Pinahusay nito ang pag-unawa at kakayahang mabasa ng code.
- Ang mga dalisay na pagpapaandar ay kinukuha ang mga parameter nang isang beses, na gumagawa ng hindi mababago na output. Ang paggamit ng hindi mababago na mga halaga ay ginagawang mas madali ang pag-debug at pagsubok.
Mas maikli at mas madaling maunawaan
Ang mga ito ay mas maikli at mas madaling maunawaan kaysa sa mga imperyalista. Ipinakita ng mga pag-aaral na ang average na pagiging produktibo ng programmer sa mga tuntunin ng mga linya ng code ay higit o pareho sa pareho para sa anumang wika ng programming, isinasalin sa mas mataas na produktibo.
Walang daloy ng control
Ang pagtawag ng isang function ay hindi maaaring magkaroon ng ibang epekto kaysa sa pagkalkula ng resulta nito. Nilalapat nito ang isang mahalagang mapagkukunan ng mga pagkakamali, na ginagawang hindi nauugnay din ang pagkakasunud-sunod ng pagpapatupad, dahil walang epekto na maaaring magbago ng halaga ng isang expression, at maaari itong masuri sa anumang oras.
Ang programmer ay hinalinhan ng pasanin ng pagtatatag ng isang daloy ng kontrol. Dahil ang mga expression ay maaaring masuri sa anumang oras, ang mga variable ay maaaring mapalitan ng kanilang mga halaga.
Ang awtonomiya na ito ay gumagawa ng mga programang pang-pagganap na mas matematiko na mapapamahalaan kaysa sa mga maginoo na programa.
Mga Kakulangan
- Ang functional programming paradigma ay hindi simple, kaya mahirap para sa isang nagsisimula na maunawaan.
- Mahirap mapanatili, dahil maraming mga bagay na umuusbong sa pag-encode.
- Sa ilang mga kaso, ang pagsulat ng mga dalisay na pag-andar ay nagdudulot ng pagbawas sa kakayahang mabasa ng code.
- Hindi mababago ang mga halaga sa pagsasama sa pag-urong ay maaaring humantong sa isang mabagal na pagbawas sa pagganap ng system.
- Ang muling paggamit ay napaka kumplikado at nangangailangan ng patuloy na refactoring.
- Ang pagsulat ng mga programa sa isang estilo ng recursive sa halip na gumamit ng mga loop o mga loop ay maaaring maging isang napaka nakakatakot na gawain.
- Ang mga bagay ay maaaring hindi kumakatawan sa tama ng problema.
- Kahit na ang pagsulat ng mga dalisay na pag-andar ay nagiging simple, pagsasama-sama ng mga ito sa natitirang aplikasyon at sa mga operasyon ng input / output ay medyo mahirap.
Aplikasyon
Ang artipisyal na programming intelligence ay ginagawa sa mga operating programming language at mga artipisyal na diskarte sa intelektwal na lumipat sa mga tunay na aplikasyon sa mundo.
Nagaganyak din ito sa pagpapatupad ng mga kumplikadong modelo ng matematika. Para sa kadahilanang ito, ang isa sa mga pangunahing gamit ng mga functional na wika ay tradisyonal na naging pang-akademiko. Ito ay kapaki-pakinabang para sa pagbuo ng mga maipapatupad na mga pagtutukoy at pagpapatupad ng prototype.
Maraming mga functional na wika ang napakahusay sa pagpapatupad ng pagkakatulad na pagproseso. Ito ay dahil sa kakayahang samantalahin ang mga dalisay na pag-andar, na palaging ibabalik ang parehong halaga anuman ang pagkakasunud-sunod na naisakatuparan.
Functional na pamamaraan
Ginagamit ng WhatsApp ang wikang programming ng Erlang, na sumusunod sa functional na modelo ng programming, kaya pinapayagan ang higit sa isang daang ng mga empleyado nito na hawakan ang data na kabilang sa mga 1.6 bilyong tao.
Ang isa pang mahalagang tagadala ng istilo ng pagganap ng programming ay ang Haskell. Ginagamit ito ng Facebook sa antispam system nito. Kahit na ang JavaScript, isa sa mga pinaka-malawak na ginagamit na wika ng programming, ay nagpapakita ng mga katangian ng isang pabagu-bagong na-type na functional na wika.
Mga wika na sumusuporta sa functional programming
D
Ito ay dinisenyo pagkatapos ng C ++, nakakakuha ng lahat ng mga pakinabang nito habang inaalis ang mga napansin na kahinaan ng pagkakaroon ng katugma sa C.
Erlang
Ito ay lubos na nasusukat at kasabay, ginagawa itong mainam para sa telecommunication at iba pang mga aplikasyon na tumatanggap ng napakalaking halaga ng data sa isang hindi mahuhulaan na pagkakasunud-sunod.
Haskell
Ito ay isang dalisay na functional na wika ng programming, na gumagamit ng calculus ng Lambda.
ML
Ginagamit ito sa matematika, pang-agham, pinansyal, analytical at iba pang mga aplikasyon. Isa sa mga lakas nito ay ang paggawa ng software upang mahawakan ang iba pang mga programa.
Layunin Caml
Ito ay isang bukas na mapagkukunan ng wika na batay sa Caml. Ito ay may posibilidad na lumikha ng napaka magaan na programa, na tumutulong sa kanila na mag-load at mas mabilis na tumakbo kaysa sa mga nilikha ng iba pang mga wika.
Scheme
Ito ay batay sa LISP syntax at ang ALGOL na istraktura. Dahil sa pagiging simple nito, ginagamit ito sa maraming mga kurso sa agham ng computer bilang isang pagpapakilala sa disenyo ng programa upang ipakita ang ilan sa mga pangunahing kaalaman sa programming ng computer.
Mga Sanggunian
- Sino ang Nagho-host ng Ito (2019). Alamin ang Functional Programming: Ang Estilo ng Coding na Ito Ay Sasabog ang Iyong isip. Kinuha mula sa: whoishostingthis.com.
- Andrea Bertoli (2019). Isang Sapat na Panimula sa Functional Programming. Kinuha mula sa: dev.to.
- Hacker Earth (2020). Functional Programming. Kinuha mula sa: hackerearth.com.
- Clojure (2020). Functional Programming. Kinuha mula sa: clojure.org.
- Akhil Bhadwal (2020). Functional Programming: Mga Konsepto, Kalamangan, Kakulangan, at Aplikasyon. Hack. Kinuha mula sa: hackr.io.
- Guru99 (2020). Ano ang Functional Programming? Tutorial na may Halimbawa. Kinuha mula sa: guru99.com.