Īss ievads funkcionālā reaktīvā programmēšanā (FRP)

FRP apzīmē divu programmēšanas paradigmu krustojumu. Bet, pirms mēs iedziļināmies jēdzienos, mums jāzina mazliet vairāk par dažiem pamatjēdzieniem.

FRP: reaģēšana uz notikumiem

Obligāta programmēšana

Parasti mēs rakstām kodu, kas apraksta, kā tam vajadzētu atrisināt problēmu. Katra koda rinda tiek izpildīta secīgi, lai iegūtu vēlamo rezultātu, ko sauc par obligātu programmēšanu. Obligātā paradigma liek programmētājiem rakstīt “kā” programma atrisinās noteiktu uzdevumu. Ņemiet vērā, ka iepriekšējā paziņojumā atslēgvārds ir “kā”.

Šis ir piemērs:

ļaujiet skaitļiem = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var numberLessThanFive = [Int] ()
indeksam 0 .. 

Kā redzat, mēs secīgi izpildām virkni instrukciju, lai iegūtu vēlamo izvadi.

Funkcionālā programmēšana

Funkcionālā programmēšana ir programmēšanas paradigma, kurā jūs visu modelējat tādas funkcijas rezultātā, kura ļauj izvairīties no stāvokļa maiņas un datu mutācijas. Turpmākajās sadaļās mēs apspriedīsim tādus jēdzienus kā stāvokļa un datu mainīgums un to nozīme, taču atsaucei:

  • apsveriet stāvokli kā vienu no dažādajām permutācijām un kombinācijām, kas jūsu programmai jebkurā laikā var būt tās izpildes laikā
  • datu mainīgums ir jēdziens, kurā dotā datu kopa programmas izpildes laikā noteiktā laika posmā var mainīties.

To pašu piemēru, kas tika dots, izmantojot obligātu programmēšanu, var izmantot šādā veidā, izmantojot funkcionālo pieeju:

ļaujiet skaitļiem = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let numbersLessThanFive = numer.filter {$ 0 <5}

Mēs barojam filtra funkciju ar aizbāzni, kas satur noteiktu kritēriju. Pēc tam šo kritēriju piemēro katram skaitļu masīva elementam, un iegūtais masīvs satur elementus, kas atbilst mūsu kritērijiem.

Ievērojiet abu masīvu deklarāciju abos piemēros.

Pirmajā piemērā masīvs numberLessThanFive tika deklarēts kā mainīgais, savukārt otrajā piemērā tas pats masīvs tika deklarēts kā let.

Vai tas zvana dažiem zvaniem?

Kura pieeja ir labāka, ar kuru masīvu ir drošāk strādāt?

Ko darīt, ja vairāk nekā viens pavediens mēģina strādāt ar to pašu masīvu un tā elementiem?

Vai pastāvīgais masīvs nav ticamāks?

Reaktīva programmēšana

Reaktīvā programmēšana ir programmēšana ar asinhronām datu straumēm vai notikumu straumēm. Notikumu straume var būt jebkas, piemēram, tastatūras ievadi, taustiņu pieskārieni, žesti, GPS atrašanās vietas atjauninājumi, akselerometrs un iBeacon. Jūs varat klausīties straumi un attiecīgi uz to reaģēt.

Jūs, iespējams, esat dzirdējis par reaktīvo programmēšanu, taču tas varēja izklausīties pārāk iebiedējoši, biedējoši vai noslēpumaini, lai pat izmēģinātu. Varbūt esat redzējis kaut ko līdzīgu:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
let flatArray = twoDimensionalArray.flatMap {masīvs
    atgriešanās array.map {vesels skaitlis
        atgriešanās vesels skaitlis * 2
    }
}

drukāt (flatArray)

Izeja: [2, 4, 6, 8, 10, 12]

No pirmā acu uzmetiena iepriekšējais kods varētu šķist mazliet neskaidrs, un tas varētu būt iemesls, kāpēc jūs pagriezāt muguru pret šo programmēšanas stilu. Reaktīvā programmēšana, kā mēs jau minējām iepriekš, ir programmēšana ar notikumu plūsmām.

Tomēr lielāks jautājums joprojām paliek neatbildēts. Kas ir funkcionālā reaktīvā programmēšana (FRP)?

FRP ir funkcionālu un reaktīvu paradigmu kombinācija. Citiem vārdiem sakot, tā reaģē uz datu plūsmām, izmantojot funkcionālo paradigmu. FRP nav utilīta vai bibliotēka - tas maina veidu, kā jūs arhitektējat savas lietojumprogrammas un domājat par savām lietojumprogrammām.

Nākamajā blogā es runāšu par reaktīvās programmēšanas pamatakmeņiem - līdz tam sekojiet līdzi un baudiet lasīšanu :)

Lai gūtu pārliecību par reaktīvajām koncepcijām un rakstītu iOS lietojumprogrammas RxSwift, varat izlasīt manu grāmatu: Reaktīvā programmēšana Swift 4.

Vairāk par maniem projektiem un lejupielādējamo kodu ir manā publiskajā vietnē github repo

Plašāku informāciju par tēmu varat lasīt šeit

Paldies par lasīšanu, lūdzu, dalieties tajā, ja esat to atradis noderīgu :)