Trumpas funkcinio reaktyvaus programavimo (FRP) įvadas

FRP rodo dviejų programavimo paradigmų sankirtą. Bet prieš gilindamiesi į sąvokas, turime šiek tiek daugiau žinoti apie kai kuriuos pagrindinius terminus.

FRP: reagavimas į įvykius

Imperatyvus programavimas

Tradiciškai mes rašome kodą, kuris apibūdina, kaip jis turėtų išspręsti problemą. Kiekviena kodo eilutė vykdoma paeiliui, norint gauti norimą rezultatą, vadinamą būtinuoju programavimu. Imperatyvi paradigma verčia programuotojus rašyti „kaip“ programa išspręs tam tikrą užduotį. Atminkite, kad ankstesniame teiginyje raktinis žodis yra „kaip“.

Štai pavyzdys:

tegul skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9]
kintamasis skaičiusLessThanFive = [Int] ()
indeksui esant 0 .. 

Kaip matote, mes paeiliui vykdome keletą instrukcijų, kad gautume norimą išvestį.

Funkcinis programavimas

Funkcinis programavimas yra programavimo paradigma, kai viską modeliuojate kaip funkciją, kuri leidžia išvengti būsenos pakeitimo ir duomenų mutavimo. Tolesnėse dalyse aptarsime tokias sąvokas kaip būsena ir duomenų keičiamumas bei jų svarba, tačiau nuorodomis:

  • apsvarstykite būseną kaip vieną iš skirtingų permutacijų ir derinių, kuriuos jūsų programa gali turėti bet kuriuo metu vykdant
  • duomenų keičiamumas yra sąvoka, kai duotas duomenų rinkinys gali pasikeisti per tam tikrą laiką programos vykdymo metu.

Tas pats pavyzdys, kuris buvo pateiktas naudojant imperatyvųjį programavimą, gali būti naudojamas tokiu būdu, naudojant funkcinį metodą:

tegul skaičiai = [1, 2, 3, 4, 5, 6, 7, 8, 9]
tegul numbersLessThanFive = skaičiai.filteris {$ 0 <5}

Mes tiekiame filtro funkciją su uždarymu, kuriame yra tam tikras kriterijus. Tada šis kriterijus taikomas kiekvienam skaičių masyvo elementui, o gautą masyvą sudaro elementai, kurie atitinka mūsų kriterijus.

Atkreipkite dėmesį į abiejų pavyzdžių dviejų masyvų deklaraciją.

Pirmajame pavyzdyje skaičiųLessThanFive masyvas buvo deklaruotas kaip kintamasis, o antrajame pavyzdyje tas pats masyvas buvo deklaruotas kaip let.

Ar skamba kažkokie varpai?

Kuris požiūris yra geresnis, kuris masyvas yra saugesnis dirbti?

Ką daryti, jei daugiau nei viena gija bando dirbti su tuo pačiu masyvu ir jo elementais?

Ar nėra pastovus masyvas patikimesnis?

Reaktyvus programavimas

Reaktyvusis programavimas yra programavimas naudojant asinchroninius duomenų srautus arba įvykių srautus. Įvykių srautas gali būti bet koks, pavyzdžiui, klaviatūros įvestys, mygtukų paspaudimai, gestai, GPS vietos atnaujinimai, akselerometras ir „iBeacon“. Galite klausytis srauto ir atitinkamai į jį reaguoti.

Galbūt girdėjote apie reaktyvųjį programavimą, tačiau jis galėjo skambėti pernelyg bauginančiai, baisiai ar šmaikščiai, kad net išbandyti. Galbūt matėte kažką panašaus:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
tegul flatArray = twoDimensionalArray.flatMap {masyvas
    grąžinti array.map {sveikasis skaičius
        grįžtamasis sveikasis skaičius 2
    }
}

spausdinti („flatArray“)

Išėjimas: [2, 4, 6, 8, 10, 12]

Iš pirmo žvilgsnio ankstesnis kodas gali jaustis šiek tiek neaiškus, ir tai gali būti priežastis, dėl kurios atsigręžėte į šį programavimo stilių. Reaktyvus programavimas, kaip jau minėjome anksčiau, yra programavimas įvykių srautais.

Tačiau didesnis klausimas vis dar liko neatsakytas. Kas yra funkcinis reaktyvusis programavimas (FRP)?

FRP yra funkcinių ir reaktyviųjų paradigmų derinys. Kitaip tariant, ji reaguoja į duomenų srautus naudodama funkcinę paradigmą. FRP nėra naudingumas ar biblioteka - tai keičia jūsų programų architektūros ir jūsų programų mąstymo būdą.

Kitame tinklaraštyje kalbėsiu apie pagrindinius reaktyviojo programavimo elementus - iki tol būkite nusiteikę ir mėgaukitės skaitymu :)

Jei norite tvirtai suvokti reaktyviąsias sąvokas ir rašyti „iOS“ programas „RxSwift“, galite perskaityti mano knygą: Reaktyvusis programavimas „Swift 4“.

Daugiau mano projektų ir atsisiunčiamų kodų yra mano viešuose „github“ repo leidiniuose

Daugiau apie temą galite perskaityti čia

Ačiū, kad skaitėte, prašau pasidalinti, jei jums pasirodė naudinga :)