Nopea johdanto toiminnalliseen reagoivaan ohjelmointiin (FRP)

FRP edustaa kahden ohjelmointiparadigman leikkausta. Mutta ennen kuin syventämme käsitteitä, meidän on tiedettävä hiukan enemmän joistakin perustermeistä.

FRP: reagointi tapahtumiin

Pakollinen ohjelmointi

Perinteisesti kirjoitamme koodin, joka kuvaa, kuinka sen pitäisi ratkaista ongelma. Jokainen koodirivi suoritetaan peräkkäin tuottaaksesi halutun lopputuloksen, joka tunnetaan pakollisena ohjelmointina. Pakollinen paradigma pakottaa ohjelmoijat kirjoittamaan "kuinka" ohjelma ratkaisee tietyn tehtävän. Huomaa, että edellisessä lausunnossa avainsana on "miten".

Tässä on esimerkki:

olkoon numerot = [1, 2, 3, 4, 5, 6, 7, 8, 9]
muuttujatLessThanFive = [Int] ()
hakemistoon 0 .. 

Kuten näette, suoritamme peräkkäin sarjan ohjeita halutun tuloksen tuottamiseksi.

Toiminnallinen ohjelmointi

Funktionaalinen ohjelmointi on ohjelmointiparadigma, jossa mallinnat kaiken toiminnon tuloksena, joka välttää tilan muuttamisen ja datan mutaation. Keskustelemme käsitteistä kuten tilan ja datan siirrettävyys ja niiden merkitys seuraavissa osissa, mutta viitteinä:

  • pitää tilaa yhtenä erilaisista permutaatioista ja yhdistelmistä, jotka ohjelmallasi voi olla milloin tahansa suorituksen aikana
  • datan siirrettävyys on käsite, jossa tietty tietojoukko saattaa muuttua tietyn ajan kuluessa ohjelman suorituksen aikana.

Sama esimerkki, joka annettiin imperatiivisella ohjelmoinnilla, voidaan käyttää seuraavalla tavalla käyttämällä toiminnallista lähestymistapaa:

olkoon numerot = [1, 2, 3, 4, 5, 6, 7, 8, 9]
anna numerotLessThanFive = numerot.suodatin {$ 0 <5}

Syötämme suodatintoiminnon suljimella, joka sisältää tietyn kriteerin. Tätä kriteeriä käytetään sitten jokaisessa numero taulukon elementissä, ja tuloksena oleva taulukko sisältää elementtejä, jotka täyttävät kriteerimme.

Huomaa kahden taulukon ilmoittaminen molemmissa esimerkeissä.

Ensimmäisessä esimerkissä numerotLessThanFive-taulukko ilmoitettiin muuttujana, kun taas toisessa esimerkissä sama taulukko julistettiin laskuksi.

Soittaako se kelloja?

Mikä lähestymistapa on parempi, minkä ryhmän kanssa on turvallisempaa työskennellä?

Entä jos useampi kuin yksi säie yrittää toimia saman taulukon ja sen elementtien kanssa?

Eikö vakio taulukko ole luotettavampi?

Reaktiivinen ohjelmointi

Reaktiivisella ohjelmoinnilla tarkoitetaan asynkronisten tietovirtojen tai tapahtumavirtojen ohjelmointia. Tapahtumavirta voi olla mitä tahansa näppäimistön tuloja, painikkeiden kosketuksia, eleitä, GPS-sijainnin päivityksiä, kiihtyvyysanturia ja iBeaconia. Voit kuunnella suoratoistoa ja reagoida siihen vastaavasti.

Olet ehkä kuullut reaktiivisesta ohjelmoinnista, mutta se on ehkä kuulostanut liian pelottavasta, pelottavasta tai salaperäisestä edes kokeilla. Olet ehkä nähnyt jotain tällaista:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
anna flatArray = twoDimensionalArray.flatMap {taulukko sisään
    palauta array.map {kokonaisluku
        paluu kokonaisluku * 2
    }
}

tulosta (flatArray)

Lähtö: [2, 4, 6, 8, 10, 12]

Ensi silmäyksellä edellinen koodi saattaa tuntua hiukan hämärtymiseltä, ja tämä saattaa olla syy siihen, että käännit selkänsä tähän ohjelmointityyliin. Reaktiivinen ohjelmointi, kuten aiemmin mainitsimme, on ohjelmointi tapahtumavirtojen avulla.

Suurempaan kysymykseen ei kuitenkaan ole vielä vastattu. Mikä on toiminnallinen reaktiivinen ohjelmointi (FRP)?

FRP on funktionaalisten ja reaktiivisten paradigmien yhdistelmä. Toisin sanoen se reagoi tietovirtoihin toiminnallisen paradigman avulla. FRP ei ole apuohjelma tai kirjasto - se muuttaa tapaa, jolla arkkitehdit sovelluksiasi ja ajattelet sovelluksiasi.

Seuraavassa blogissa puhun reaktiivisen ohjelmoinnin perustekijöistä - pysykää sitten kuulolla ja nauttikaa lukemisesta :)

Voit lukea kiinni reaktiivisista käsitteistä ja kirjoittaa iOS-sovelluksia RxSwiftissä lukemalla kirjani: Reaktiivinen ohjelmointi Swift 4: ssä.

Enemmän projekteistani ja ladattavasta koodistani on julkisessa github-repoissani

Voit lukea lisää aiheesta tästä

Kiitos käsittelystä, jaa se, jos pidit siitä hyödyllistä :)