Funktsionaalse reaktiivse programmeerimise (FRP) kiire sissejuhatus

FRP tähistab kahe programmeerimisparadigma ristumist. Kuid enne kui mõistetesse süveneda, peame natuke tundma mõnda põhiterminit.

FRP: sündmustele reageerimine

Kohustuslik programmeerimine

Traditsiooniliselt kirjutame koodi, mis kirjeldab, kuidas see peaks probleemi lahendama. Iga koodirida käivitatakse järjestikku, et saada soovitud tulemus, mida nimetatakse hädavajalikuks programmeerimiseks. Kohustuslik paradigma sunnib programmeerijaid kirjutama, kuidas programm teatud ülesande lahendab. Pange tähele, et eelmises avalduses on märksõnaks „kuidas”.

Siin on näide:

las numbrid = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var numberLessThanFive = [Int] ()
indeksi jaoks 0 .. 

Nagu näete, täidame soovitud väljundi saamiseks järjestikku käske.

Funktsionaalne programmeerimine

Funktsionaalne programmeerimine on programmeerimise paradigma, kus modelleerite kõike funktsiooni tulemusel, mis väldib oleku muutmist ja andmete muteerimist. Järgmistes jaotistes arutame selliseid mõisteid nagu oleku ja andmete vahetatavus ning nende olulisus:

  • arvestage olekut ühega erinevatest permutatsioonidest ja kombinatsioonidest, mis teie programmil selle täitmise ajal igal ajal võib olla
  • andmete vahetatavus on mõiste, kus antud andmestik võib programmi täitmise ajal teatud aja jooksul muutuda.

Sama näidet, mis anti hädavajaliku programmeerimise abil, saab funktsionaalset lähenemist kasutades kasutada järgmisel viisil:

las numbrid = [1, 2, 3, 4, 5, 6, 7, 8, 9]
lase numbersLessThanFive = numbers.filter {$ 0 <5}

Me toidame filtrifunktsiooni sulguriga, mis sisaldab teatud kriteeriumi. Seda kriteeriumi rakendatakse siis iga numbrimassiivi elemendi jaoks ja tulemuseks olev massiiv sisaldab elemente, mis vastavad meie kriteeriumidele.

Pange tähele mõlemas näites kahe massiivi deklareerimist.

Esimeses näites kuulutati massiiv numberLessThanFive muutujana, teises näites sama massiiv kuulutati muutujaks.

Kas see helistab mõnele kellukele?

Milline lähenemisviis on parem, millisega massiiviga on turvalisem töötada?

Mis siis, kui sama massiivi ja selle elementidega proovib töötada rohkem kui üks teema?

Kas pidev massiiv pole usaldusväärsem?

Reaktiivne programmeerimine

Reaktiivne programmeerimine on asünkroonsete andmevoogude või sündmusevoogudega programmeerimise tava. Sündmusevoog võib olla midagi muud, näiteks klaviatuuri sisendid, nupuvajutused, žestid, GPS-i asukoha värskendused, kiirendusmõõtur ja iBeacon. Võite voogu kuulata ja sellele vastavalt reageerida.

Võib-olla olete kuulnud reaktiivsest programmeerimisest, kuid see võib olla isegi liiga hirmutav, hirmutav või krüptiline, et seda isegi proovida. Võib-olla olete näinud midagi sellist:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
lase flatArray = twoDimensionalArray.flatMap {massiiv sisse
    tagasta massiiv.map {täisarv
        tagastatav täisarv * 2
    }
}

print (flatArray)

Väljund: [2, 4, 6, 8, 10, 12]

Esmapilgul võib eelnev kood end pisut varjata ja see võib olla põhjus, miks te sellele programmeerimisstiilile selja pöörasite. Reaktiivne programmeerimine, nagu me juba varem mainisime, on programmeerimine sündmuste voogudega.

Suurem küsimus jääb siiski vastamata. Mis on funktsionaalne reaktiivne programmeerimine (FRP)?

FRP on funktsionaalsete ja reaktiivsete paradigmade kombinatsioon. Teisisõnu, see reageerib andmevoogudele, kasutades funktsionaalset paradigmat. FRP ei ole utiliit ega raamatukogu - see muudab viisi, kuidas te oma rakendusi arhitektuuriksite ja rakenduste üle mõtlete.

Järgmises ajaveebis räägin reaktiivse programmeerimise põhiosadest - kuni olete siis kursis ja nautige lugemist :)

Reaktiivsete mõistete mõistmiseks ja ix-i rakenduste RxSwiftis kirjutamiseks saate lugeda minu raamatut: Reaktiivne programmeerimine Swift 4-s.

Rohkem minu projekte ja allalaaditavat koodi on minu avalikes githubide repos

Teema kohta saate rohkem lugeda siit

Täname lugemist, palun jagage seda, kui leidsite selle kasulikuks :)