Neveltui šį straipsnį pavadinau „Funkcijos kaip neatsiejama programavimo dalis“, nes be jų, mano nuomone, jokia kalba neturi teisės egzistuoti. Kas tai? Funkcija yra pagrindinė gerai parašytos programos sudedamoji dalis. Tai ne tik palengvina kodo skaitymą, bet ir radikaliai pakeičia jo idėją struktūrinis programavimas. Funkcijų pagalba galite pakartotinai panaudoti atskiras programos dalis, perduodant joms bet kokius parametrus. Jokia rimta programa neįsivaizduojama be šio programavimo elemento stebuklo.

Trumpai papasakosiu kaip tai veikia. Funkcija yra instrukcijų, kurias gali iškviesti jūsų programa, blokas. Pasiekus šio bloko antraštę (funkcijos pavadinimą), jis vykdomas ir atlieka kai kuriuos programuotojo nurodytus veiksmus. Po to šis blokas grąžina gautą reikšmę ir perduoda ją pagrindinei programai. Leiskite man paaiškinti praktiškai.

Grubiai tariant, viskas atrodo taip. Trumpai paaiškinsiu. Mes sukuriame tam tikrą kintamąjį ir priskiriame jam funkcijos myfunc vykdymo rezultatą, kuris savo ruožtu apskaičiuoja tam tikro skaičiaus kvadratūros reikšmę. Funkcijos vykdomos ne iš karto programos paleidimo metu, o tik tada, kai jos iškviečiamos. Gal kiek glumina, bet taip yra.

Kaip iškviesti funkciją?

Norėdami iškviesti funkciją, turite ją sukurti. Nors yra ir įmontuotų funkcijų. Pavyzdžiui, tai: cos, sin, md5, skaičius, abs ir taip toliau. Norėdami juos iškviesti, tereikia kintamajam priskirti norimą reikšmę.

Funkcijos argumentas yra reikšmė, kurią jam perduodate, kai ją iškviečiate. Funkcijos argumentai dedami skliausteliuose. Kai kuriate funkciją, nurodote sąlyginius argumentų pavadinimus. Tada šie pavadinimai gali būti naudojami funkcijos turinyje kaip vietiniai kintamieji. Grįžkime prie funkcijų, kurias vartotojas susikuria pats. Tai daroma labai lengvai. Pirmiausia sukuriamas funkcijos turinys:

Funkcija hello() ( aidas "Sveikas, pasauli!"; )

Tada mes tai vadiname. Ir jei jis neturi parametrų, mes tiesiog dedame skliaustus. Norėdami iškviesti šią funkciją, naudojame tik eilutę: Sveiki();. Bet kuri funkcija taip pat gali grąžinti reikšmę naudojant rezervuotas žodis grąžinti. Šis sakinys nutraukia funkcijos vykdymą ir siunčia grąžinamąją reikšmę kviečiančiai programai. function sum($first, $second) ($r=$first + $second; return $r;) echo sum(2,5); programos vykdymo rezultatas bus lygus 7. Vietiniai ir globalūs kintamieji

Kaip ir bet kurioje kitoje programavimo kalboje, yra kintamųjų, kurie pasiekiami tik funkcijos viduje, ir kintamųjų, kurie yra pačios programos kode. Tokie kintamieji atitinkamai vadinami vietiniais ir globaliais. Funkcijoje negalite pasiekti tik kintamojo, kuris buvo sukurtas už šios funkcijos ribų. Jei bandysite tai padaryti, sukursite naują kintamąjį tuo pačiu pavadinimu, bet vietos funkcijai.

$per="Dima"; function primer() // Do: local kintamojo išvestis ( echo "Mano vardas yra ".$per; ) echo primer();

Tokiu atveju ekrane pasirodys frazė „Mano vardas yra“. Tai reiškia, kad pradmenų funkcijos viduje buvo sukurtas $ per kintamasis ir pagal numatytuosius nustatymus jis buvo priskirtas nulinė vertė. Norint išvengti tokių kliūčių, reikia naudoti operatorių globalus. Atitinkamai pataisykime aukščiau pateiktą kodą:

$per="Dima"; function primer() // Atlieka: globali kintamojo išvestis ( global $per; echo "Mano vardas yra ".$per; ) echo primer();

Dabar viskas turėtų būti gerai – problema išspręsta. Tik nepamirškite, kad jei funkcija pakeis išorinio kintamojo reikšmę, toks pakeitimas paveiks visą programą, todėl šį operatorių reikia naudoti atsargiai!

Funkcijos su dviem ar daugiau argumentų

Kai kurie funkcijai perduodami argumentai gali būti pasirenkami, todėl funkcija tampa mažiau reikli. Toliau pateiktas pavyzdys tai aiškiai parodo:

... function šriftas($text, $size=5) // Do: išvesties šrifto dydis ( echo " „.$tekstas“."; ) šriftas ("Sveiki
",1); šriftas ("Sveiki
",2); šriftas ("Sveiki
",3); šriftas ("Sveiki
",4); šriftas ("Sveiki
",5); šriftas ("Sveiki
",6); šriftas ("Sveiki
");

Pagal numatytuosius nustatymus šrifto dydis yra 5. Jei praleisime antrą funkcijos parametrą, jis bus lygus šiai reikšmei.

Išvada

Prieš atsisveikindamas noriu atkreipti jūsų dėmesį į vieną patarimą. Tai susideda iš visų jūsų parašytų funkcijų sudėjimo į vieną failą (pavyzdžiui, function.php). Ir tada į failą, kuriame reikia iškviesti funkciją, tereikia įtraukti function.php ir viskas bus paruošta naudojimui. Taip bus daug lengviau suprasti jūsų programos logiką. Norėdami prisijungti, naudokite:

include_once("funkcija.php");

request_once("funkcija.php");

Jei suprantate šiame straipsnyje nagrinėjamo klausimo esmę, esu tikras, kad galėsite lengvai naudotis savo programų funkcijomis. Dar kartą tai daroma tam, kad juos būtų galima redaguoti ir pakartotinai naudoti.

Funkcijos virš skaičių. VB kalba turi šias matematines funkcijas: abs(x) - modulių skaičiavimas; kv(x) - kvadratinės šaknies apskaičiavimas, atn(x) - lanko liestinės skaičiavimas; cos(x) - kosinuso skaičiavimas; nuodėmė(x) - sinuso skaičiavimas; įdegis(x) - liestinės skaičiavimas; žurnalas(x) - natūraliojo logaritmo skaičiavimas, exp(x) - eksponento apskaičiavimas, kur x- skaitinio tipo funkcijos argumentas. Norint apskaičiuoti funkcijų, kurių nėra VisualBasic kalboje, reikšmes, reikia naudoti iš matematikos žinomas formules.

Išraiška y= VB būtų parašytas taip: y=sin(x^2)+sqr(tan(x))*(x+5) ^ (1/5).

Funkcijos argumentas turi būti parašytas skliausteliuose.

Funkcijos konvertuoti reikšmę iš vieno tipo į kitą. VB programavimo kalba suteikia funkcijas, skirtas keisti reikšmės duomenų tipą. Pavyzdžiui, yra kintamasis a tipo Double ir kintamasis s tipo String.

Norint įrašyti kintamąjį a į kintamąjį s, reikia atlikti tipo konvertavimą S=CStr(a), o kintamąjį s įrašyti į kintamąjį a–a=CDbl(s).

VB funkcijos vertės tipo konvertavimui:

CStr – konvertuoti į eilutę;

CByte – konvertavimas į baitą;

CInt – konvertavimas į sveikąjį skaičių;

CLng – konvertavimas į Long;

CSng – konvertavimas į vienvietį;

CDbl - konvertuoti į dvigubą.

2.6. Įvairių tipų duomenų atvaizdavimas kompiuterio atmintyje

Informacijos atvaizdavimui kompiuterio atmintyje (tiek skaitinei, tiek neskaitinei) naudojamas dvejetainis kodavimo metodas.

Elementarios kompiuterio atminties ląstelės ilgis yra 8 bitai (baitai). Kiekvienas baitas turi savo numerį (jis vadinamas adresu). Vadinama didžiausia bitų seka, kurią kompiuteris gali apdoroti kaip visumą mašininis žodis. Mašininio žodžio ilgis priklauso nuo procesoriaus žodžio ilgio ir gali būti 16, 32, 64 bitai ir kt.

Simbolių kodavimas. Simboliams užkoduoti pakanka vieno baito. Šiuo atveju gali būti pavaizduoti 256 simboliai (su dešimtainiai kodai nuo 0 iki 255). Asmeninių kompiuterių, suderinamų su IBM asmeniniu kompiuteriu, simbolių rinkinys dažniausiai yra ASCII kodo (American Standard Code for Information Interchange – standartinis amerikietiškas informacijos mainų kodas) plėtinys. Šiuo metu taip pat naudojami dviejų baitų simbolių atvaizdai.

Sveikųjų skaičių vaizdavimas dviejų komplemente. Vertybių diapazonas priklauso nuo jų saugojimui skirtų atminties bitų skaičiaus. n bitų atmintis gali saugoti Pvz., Integer tipo reikšmės yra diapazone nuo -32768 (-2 15) iki 32767 (2 15 - 1), o jų saugojimui yra skirti 2 baitai (16 bitų); tipo Long - diapazone nuo -2 31 iki 2 31 - 1 ir yra 4 baituose (32 bitai).

Jei sveikieji dvejetainiai skaičiai pateikiami be ženklo, skiriasi nuo 0 iki
, o pasirašytame atstove – nuo
prieš
. Šiuolaikiniuose kompiuteriuose sveikųjų skaičių bitų tinklelio ilgį n įprasta pasirinkti kaip 8 kartotinį (ty sveikąjį baitų skaičių).

Jei dydis vaizduojamas ženklu, kairysis (aukščiausias) skaitmuo rodo teigiamą skaičių, jei jame yra nulis, ir neigiamą, jei jame yra vienas.

Skaičiai numeruojami iš dešinės į kairę, pradedant nuo 0. Pav. .2.2 rodo bitų numeraciją dviejų baitų mašininiame žodyje.

Ryžiai. 2.2. Hbitų mastelio keitimas dviejų baitų mašininiame žodyje

Papildomas kodas teigiamas skaičius yra toks pat kaip ir jo tiesioginis kodas. Tiesioginį sveikojo skaičiaus kodą galima gauti taip: skaičius verčiamas į dvejetainė sistema skaičiavimas, o tada jo dvejetainis žymėjimas kairėje papildomas tiek nereikšmingų nulių, kiek to reikalauja duomenų tipas, kuriam skaičius priklauso.

Pavyzdžiui, jei skaičius 37 (10) = 100101 (2) deklaruojamas kaip sveikasis skaičius (pasižymėta šešiolika bitų), tada jo tiesioginis kodas yra 0000000000100101, o jei tai yra ilga reikšmė (pasižymėta trisdešimt dviem bitais), tada jo tiesioginis kodas yra. Kad žymėjimas būtų kompaktiškesnis, dažniau naudojamas šešioliktainis kodo atvaizdavimas. Gauti kodai gali būti atitinkamai perrašyti į 0025 (16) ir 00000025 (16).

Papildomą neigiamo sveikojo skaičiaus kodą galima gauti naudojant šį algoritmą:

    užsirašykite tiesioginį numerio modulio kodą;

    apverskite jį (vienetus pakeiskite nuliais, nulius - vienetais);

    pridėti vieną prie atvirkštinio kodo.

Pavyzdžiui, parašykime dviejų komplemento kodą -37, interpretuodami jį kaip ilgą (32 bitų pasirašytą) reikšmę:

    tiesioginis numerio 37 kodas yra ;

    atvirkštinis kodas;

    papildomas kodas arba FFFFFFDB (16) .

Gaunant skaičių pagal jo papildomą kodą, pirmiausia reikia nustatyti jo ženklą. Jei skaičius yra teigiamas, tiesiog išverskite jo kodą į dešimtainę skaičių sistemą. Esant neigiamam skaičiui, turi būti atliktas toks algoritmas:

    iš kodo atimkite skaičių 1;

    invertuoti kodą;

    išversti į dešimtainė sistema skaičiavimas. Parašykite gautą skaičių su minuso ženklu.

Pavyzdžiai. Užrašykime skaičius, atitinkančius papildomus kodus:

    0000000000010111. Kadangi reikšmingiausiame bite rašomas nulis, rezultatas bus teigiamas. Tai yra numerio 23 kodas.

    1111111111000000. Čia rašomas neigiamo skaičiaus kodas. Vykdome algoritmą: 1) 1111111111000000 (2) - 1 (2) = 1111111110111111 (2) ; 2) 0000000001000000; 3) 1000000 (2) = 64 (10) . Atsakymas: -64.

Tikslas: 1) išstudijuoti funkcijų apibūdinimo taisykles; 2) įgyti funkcijų naudojimo rašant programas C++ kalba įgūdžių.

Teorinė informacija

Pagrindinis programų vienetas C++ kalba yra funkcija.

Funkcija- logiškai užbaigtas, tam tikru būdu sukurtas programos fragmentas, turintis pavadinimą. Funkcijos leidžia padalyti dideles skaičiavimo užduotis į mažesnes.

Kiekvienoje C++ programoje būtinai yra funkcija, vadinama main, kuri yra programos turinys. Visoms kitoms funkcijoms, jei jos yra programoje, turi būti deklaruojami prototipai – scheminiai vaizdai, kurie kompiliatoriui nurodo kiekvienos programos funkcijos pavadinimą ir formą.

Funkcijos prototipo sintaksė su parametrais:

grąžinimo_vertės_tipas funkcijos_pavadinimas (parametrų_sąrašas_su_tipų_nurodymu);

Funkcijos C++ yra standartinės (bibliotekos) ir vartotojo programuojamos.

Standartinės funkcijos

Standartinių funkcijų aprašymai pateikiami failuose, įtrauktuose į programą naudojant direktyvą #include. Tokie failai vadinami antrašte; jie turi plėtinį h.

Funkcijos pavadinimo nuoroda pagrindinėje programoje vadinama funkcijos iškvietimu.

Iškvietus funkcijas, atliekami kai kurie veiksmai arba apskaičiuojama tam tikra reikšmė, kuri vėliau naudojama programoje.

y=sin(x); //sinuso skaičiavimo funkcija

Funkcijos apibrėžimas

Apskritai funkcijos apibrėžiamos taip:

grąžinimo_vertės_tipas funkcijos_pavadinimas (tipas parametro_pavadinimas,...,tipas parametro_pavadinimas)

function_body

Programuojamos funkcijos

Funkcijos, kurias pats programuotojas sukuria, supaprastina programų rašymo procesą, nes:

    padėti išvengti perprogramavimo, nes ta pati funkcija gali būti naudojama skirtingose ​​programose;

    padidinti programos moduliškumo lygį, todėl lengviau skaityti, keisti ir taisyti klaidas.

Pavyzdys9 .1. Sukurkime funkciją, kuri spausdina 65 simbolius „*“ iš eilės. Kad ši funkcija veiktų tam tikrame kontekste, ji įtraukta į firminių blankų spausdinimo programą. Programa susideda iš funkcijų: main() ir stars().

// firminis blankas

#įtraukti

const int Limit=65;

tuščios žvaigždės (tuščios); // žvaigždės() funkcijos prototipas

cout<<"Moscow Institute of Electronic Engineering"<

// Stars() funkcijos apibrėžimas

už (skaičius = 1; skaičius<=Limit; count++)

Mes pažvelgėme į paprastos funkcijos, kuri neturi argumentų ir nepateikia jokių reikšmių, pavyzdį.

Funkcijos parametrai

Kaip pavyzdį apsvarstykite funkcijos parametrų naudojimą.

Pavyzdys9. 2. Parašykime tarpo () funkciją, kurio argumentas bus tarpų, kuriuos ši funkcija turėtų išspausdinti, skaičius.

#define adresą "Zelenogradas"

#define pavadinimas „Maskvos elektronikos inžinerijos institutas“

#define skyrius "Informatika ir programavimas"

const int LIMIT=65;

#įtraukti

tuščias tarpas (int numeris);

cout<

tarpai=(LIMIT - strlen(vardas))/2; // Apskaičiuokite kiek

// reikia tarpų

cout<

space((LIMIT - strlen(department))/2); // argumentas yra išraiška

cout<

// Stars() funkcijos apibrėžimas

už (skaičius = 1; skaičius<=LIMIT; count++)

// Funkcijos tarpo() apibrėžimas

tuščias tarpas (int numeris)

už (skaičius = 1; skaičius<=number; count++)

Kintamasis skaičius vadinamas formaliuoju argumentu. Šis kintamasis įgauna tikrojo argumento reikšmes, kai funkcija iškviečiama. Kitaip tariant, formalus argumentas yra vadinamosios paprogramės apibrėžimo kintamasis, ir tikras argumentas- tam tikra reikšmė, kurią iškviečianti programa priskiria šiam kintamajam.

Jei norint susisiekti su tam tikra funkcija reikia daugiau nei vieno argumento, kartu su funkcijos pavadinimu galite nurodyti kableliais atskirtą argumentų sąrašą:

tuščias spausdinimo skaičius (int i, int j)

(išeiti<<"Координаты точек”<< i << j <

Funkcijos įvesties reikšmę galima apdoroti dėl buvimo argumentas; išvesties reikšmė grąžinama naudojant return raktinį žodį.

Atskira sistema (posistemė, paprogramė), kuri gauna valdymo įvestis argumentų reikšmių pavidalu. Išvestyje funkcija grąžina rezultatą, kuris gali būti arba skaliarinė reikšmė, arba vektorinė reikšmė (struktūra, indekso masyvas ir kt.). Vykdant funkciją, valdomoje sistemoje taip pat gali būti atlikti kai kurie pakeitimai, tiek grįžtami, tiek negrįžtami.

Šalutinis poveikis

Funkcijos ir procedūros

Kai kuriose programavimo kalbose (pavyzdžiui, Pascal) funkcijos ir procedūros (paprogramės, kurios negrąžina reikšmių) aiškiai išskiriamos pagal kalbos sintaksę. Kitose – pavyzdžiui, C kalboje – procedūros yra ypatingas atvejis (poaibis) funkcijų, kurios grąžina tipo (pseudotipo) reikšmę void – tuščią reikšmę.

Argumentai ir parinktys

Kai funkcija iškviečiama, jai perduodami argumentai. Jei argumentas yra nuoroda į atminties sritį (kintamasis, rodyklė arba nuoroda), tai funkcija, priklausomai nuo jos parametro tipo, gali naudoti savo reikšmę (pavyzdžiui, sukurti kintamąjį, nukopijuoti ten argumento reikšmę ) arba patį argumentą (sukurkite nuorodą į sritį, kurią atmintis nurodo argumentu).

Funkcija be argumentų

Tokia funkcija nereikalauja jokių argumentų.

taip pat žr

Nuorodos

  • PHP funkcijos. Sintaksė ir PHP funkcijų naudojimo pavyzdžiai

Wikimedia fondas. 2010 m.

Pažiūrėkite, kas yra „Funkcija (programavimas)“ kituose žodynuose:

    Vikižodynas turi straipsnį "funkcija" Funkcija yra polisemantinis terminas, reiškiantis ryšį tarp elementų, kuriuose vieno pakeitimas reiškia pasikeitimą... Vikipedija

    „Stub“ funkcija programuojant – tai funkcija, kuri neatlieka jokio prasmingo veiksmo, grąžina tuščią rezultatą arba įvesties duomenis nepakeistus. Lygiavertis angliškas žodis yra stub. Naudojamas: Aiškumo dėlei, kai ... ... Vikipedija

    aukštesnė psichinė funkcija: atsigavimas- (aukštesnių psichinių funkcijų atkūrimas) neuropsichologijos skyrius, skirtas aukštesnių psichikos funkcijų, sutrikusių dėl vietinių smegenų smegenų pažeidimų, funkcijų atkūrimo mechanizmų ir metodų tyrinėjimui. Remiantis idėjomis apie... Didžioji psichologinė enciklopedija

    Matematinis programavimas yra matematinė disciplina, kuri tiria teoriją ir metodus, kaip išspręsti funkcijų ekstremalių radimo baigtinių matmenų vektorinės erdvės aibėse, kurias nustato tiesiniai ir netiesiniai apribojimai ... ... Vikipedija

    Kompiuterizacijos srityje tinklo užduočių programavimo arba kitaip vadinamo tinklo programavimo sąvoka yra gana panaši į lizdų programavimo ir kliento-serverio programavimo sąvokas, ... ... Wikipedia

    Aukštesnės eilės funkcija yra funkcija, kuri kitas funkcijas priima kaip argumentus arba kaip rezultatą grąžina kitą funkciją. Pagrindinė idėja yra ta, kad funkcijos turi tokį patį statusą kaip ir kiti duomenų objektai... ... Vikipedija

    MATEMATINIS PROGRAMAVIMAS- sudėtinga matematika. Kelių kintamųjų funkcijų ekstremumo (maksimalaus arba minimumo) radimo problemų sprendimo modeliai ir metodai, esant apribojimams nelygybių pavidalu. Tai reiškia, kad kintamieji apibūdina kai kuriuos mechanizmo aspektus ... Rusijos sociologinė enciklopedija

    Matematikos disciplina, tirianti matematiką. programų abstrakcijos, traktuojamos kaip formalia kalba išreikšti objektai, turintys tam tikrą informaciją ir loginiai. struktūra ir vykdoma automatiškai. įrenginiai. P. t....... Matematinė enciklopedija

    Programavimo funkcija yra paprogramės tipas. Ypatybė, kuri ją išskiria iš kitos rūšies procedūrų paprogramių, yra ta, kad funkcija grąžina reikšmę, o jos iškvietimas gali būti naudojamas programoje kaip išraiška. Žiūrint iš taško ... ... Vikipedija

    PROGRAMAVIMAS, MATEMATIKA- taikomosios matematikos šaka, naudojama kaip ekonominių tyrimų metodas. Plėtoja sąlyginių ekstremalių problemų sprendimo teoriją ir metodus, yra pagrindinė įvairių valdymo problemų analizės formalaus aparato dalis... Didysis ekonomikos žodynas

Jei esate kūrėjas kaip aš, tikriausiai pirmiausia išmokote OOP paradigmą. Jūsų pirmoji kalba buvo Java arba C++ – arba, jei pasisekė, Ruby, Python arba C# – todėl tikriausiai žinote, kas yra klasės, objektai, egzemplioriai ir pan. Ko tikrai nelabai supranti, tai tos keistos paradigmos, vadinamos funkciniu programavimu, pagrindai, kurie ženkliai skiriasi ne tik nuo OOP, bet ir nuo procedūrinio, į prototipus orientuoto ir kitokio programavimo.

Funkcinis programavimas populiarėja – ir dėl geros priežasties. Pati paradigma nėra nauja: „Haskell“ yra bene funkcionaliausia kalba ir ji atsirado 90-aisiais. Tokios kalbos kaip Erlang, Scala, Clojure taip pat patenka į funkcinio apibrėžimą. Vienas iš pagrindinių funkcinio programavimo privalumų yra galimybė rašyti programas, kurios veikia vienu metu (jei jau pamiršote, kas tai yra - atnaujinkite atmintį skaitydami), ir be klaidų - tai yra, aklavietės ir gijų sauga jūsų netrukdys.

Funkcinis programavimas turi daug privalumų, tačiau galimas maksimalus procesoriaus resursų panaudojimas dėl konkurencinės elgsenos yra pagrindinis jo privalumas. Žemiau apžvelgsime pagrindinius funkcinio programavimo principus.

Įvadas: Visi šie principai yra neprivalomi (daugelyje kalbų jų visiškai nesilaikoma). Visi jie yra teoriniai ir reikalingi norint tiksliausiai apibrėžti funkcinę paradigmą.

1. Visos funkcijos yra švarios

Ši taisyklė neabejotinai yra pagrindinė funkcinio programavimo taisyklė. Visos funkcijos yra grynos, jei atitinka dvi sąlygas:

  1. Funkcija, iškviesta tais pačiais argumentais, visada grąžina tą pačią reikšmę.
  2. Vykdant funkciją nėra jokių šalutinių poveikių.

Pirma taisyklė aiški – jei iškviečiu funkciją sum(2, 3), tikiuosi, kad rezultatas visada bus 5. Kai tik iškviečiate funkciją rand() arba pasiekiate kintamąjį, kuris nėra apibrėžtas funkcijoje, pažeidžiamas funkcijos grynumas, o tai neleidžiama atliekant funkcinį programavimą.

Antroji taisyklė – jokio šalutinio poveikio – platesnio pobūdžio. Šalutinis poveikis yra kažko kito, nei šiuo metu vykdomos funkcijos, pakeitimas. Kintamojo keitimas už funkcijos ribų, rašymas į konsolę, išimtis, duomenų skaitymas iš failo yra šalutinių poveikių, kurie atima funkcijos grynumą, pavyzdžiai. Tai gali atrodyti kaip rimtas apribojimas, bet pagalvokite dar kartą. Jei esate tikri, kad funkcijos iškvietimas nieko nepakeis „išorėje“, šią funkciją galite naudoti bet kuriuo atveju. Tai atveria kelią konkurencingam programavimui ir kelių gijų programoms.

2. Visos funkcijos yra pirmos klasės ir aukštesnės eilės

Ši koncepcija nėra FP ypatybė (ji naudojama Javascript, PHP ir kitose kalbose), bet tai yra reikalavimas. Tiesą sakant, Vikipedijoje yra visas straipsnis, skirtas pirmos klasės funkcijoms. Kad funkcija būtų pirmos klasės, ji turi būti deklaruojama kaip kintamasis. Tai leidžia valdyti funkciją kaip įprastą duomenų tipą ir vis tiek ją vykdyti.

3. Kintamieji yra nekintantys

Čia viskas paprasta. Funkciniame programavime negalite pakeisti kintamojo, kai jis buvo inicijuotas. Galite kurti naujus, bet negalite keisti esamų – ir dėl to galite būti tikri, kad joks kintamasis nepasikeis.

4. Santykinis funkcijų skaidrumas

Sunku pateikti teisingą santykinio skaidrumo apibrėžimą. Manau, kad tiksliausias yra toks: jei funkcijos iškvietimą galite pakeisti grąžinama reikšme, o būsena nesikeičia, tada funkcija yra gana skaidri. Tai gali būti akivaizdu, bet pateiksiu pavyzdį.

Tarkime, kad turime „Java“ funkciją, kuri prideda 3 ir 5:

Viešas int addNumbers()( return 3 + 5; ) addNumbers() // 8 8 // 8

Akivaizdu, kad bet koks šios funkcijos iškvietimas gali būti pakeistas 8, o tai reiškia, kad funkcija yra gana skaidri. Štai nepermatomos funkcijos pavyzdys:

Public void printText()( System.out.println("Hello World"); ) printText() // nieko nepateikia, bet išspausdina "Hello World"

Ši funkcija nieko negrąžina, bet spausdina tekstą, o jei funkcijos iškvietimas bus pakeistas niekuo, konsolės būsena bus kitokia – vadinasi, funkcija nėra santykinai skaidri.

5. Funkcinis programavimas remiasi lambda skaičiavimu

Funkcinis programavimas labai priklauso nuo matematinės sistemos, vadinamos lambda skaičiavimu. Nesu matematikas, todėl nesileisiu į detales, bet noriu atkreipti dėmesį į du pagrindinius lambda skaičiavimo principus, kurie sudaro pačią funkcinio programavimo koncepciją:

  1. Lambda skaičiavime visos funkcijos gali būti anoniminės, nes vienintelė reikšminga funkcijos antraštės dalis yra argumentų sąrašas.
  2. Kai iškviečiama, visos funkcijos pereina kariavimo procesą. Tai yra taip: jei funkcija iškviečiama su keliais argumentais, tai iš pradžių ji bus vykdoma tik su pirmuoju argumentu ir grąžins naują funkciją su 1 argumentu mažiau, kuri bus nedelsiant iškviesta. Šis procesas yra rekursyvus ir tęsiasi tol, kol bus pritaikyti visi argumentai, grąžinant galutinį rezultatą. Kadangi funkcijos yra grynos, tai veikia.

Kaip jau sakiau, lambda skaičiavimas tuo nesibaigia, bet mes apžvelgėme tik pagrindinius su FP susijusius aspektus. Dabar pokalbyje apie funkcinį programavimą galite blykstelėti žodžiu „lambda skaičiuoklė“ ir visi manys, kad tu klampi 🙂

Išvada

Funkcinis programavimas yra tikras smegenų įtempimas, tačiau tai labai galingas metodas ir tikiu, kad jo populiarumas tik augs.

Jei norite sužinoti daugiau apie funkcinį programavimą, patariame susipažinti su FP principų naudojimo JavaScript ( , ) pavyzdžiais, taip pat pavyzdžiais, skirtais funkciniam C#.