Rychlý úvod do funkčního reaktivního programování (FRP)

FRP představuje průnik dvou programových paradigmat. Než se však budeme hlouběji zabývat pojmy, potřebujeme vědět něco více o některých základních pojmech.

FRP: reakce na události

Naléhavé programování

Tradičně píšeme kód, který popisuje, jak by měl problém vyřešit. Každá řádka kódu je prováděna postupně za účelem dosažení požadovaného výsledku, který je znám jako imperativní programování. Imperativní paradigma nutí programátory psát „jak“ program vyřeší určitý úkol. Všimněte si, že v předchozím příkazu je klíčové slovo „jak“.

Zde je příklad:

let čísla = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var numbersLessThanFive = [Int] ()
pro index v 0 .. 

Jak vidíte, postupně provádíme řadu pokynů, abychom vytvořili požadovaný výstup.

Funkční programování

Funkční programování je programovací paradigma, ve kterém modelujete vše na základě funkce, která zabraňuje změně stavu a mutaci dat. V následujících kapitolách budeme diskutovat pojmy jako stavová a datová proměnlivost a jejich význam, ale pro informaci:

  • považujte stav za jednu z různých permutací a kombinací, které může váš program mít v daném okamžiku během jeho provádění
  • Mutabilita dat je koncept, kdy se daný datový soubor může během provádění programu během daného programu změnit.

Stejný příklad, který byl uveden pomocí imperativního programování, lze použít následujícím způsobem pomocí funkčního přístupu:

let čísla = [1, 2, 3, 4, 5, 6, 7, 8, 9]
let numbersLessThanFive = numbers.filter {$ 0 <5}

Funkci filtru napájíme uzávěrem obsahujícím určité kritérium. Toto kritérium se pak použije na každý prvek v poli čísel a výsledné pole obsahuje prvky, které splňují naše kritéria.

Všimněte si deklarace obou polí v obou příkladech.

V prvním příkladu bylo pole numberLessThanFive deklarováno jako var, zatímco ve druhém příkladu bylo stejné pole deklarováno jako let.

Zvoní to nějaké zvonky?

Jaký přístup je lepší, s kterým polem je bezpečnější pracovat?

Co když se více než jedno vlákno snaží pracovat se stejným polem a jeho prvky?

Není konstantní pole spolehlivější?

Reaktivní programování

Reaktivní programování je praxe programování s asynchronními datovými toky nebo toky událostí. Stream událostí může být cokoli, jako jsou vstupy z klávesnice, klepnutí na tlačítka, gesta, aktualizace polohy GPS, akcelerometr a iBeacon. Můžete poslouchat proud a podle toho na něj reagovat.

Možná jste slyšeli o reaktivním programování, ale mohlo to znít příliš zastrašující, strašidelné nebo kryptické, než aby to vyzkoušeli. Možná jste viděli něco takového:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
let flatArray = twoDimensionalArray.flatMap {array in
    return array.map {integer in
        návratové celé číslo * 2
    }
}

tisk (flatArray)

Výstup: [2, 4, 6, 8, 10, 12]

Na první pohled se předchozí kód může zdát trochu nejasný, a to je důvod, proč jste se obrátili zády k tomuto stylu programování. Jak jsme již zmínili, reaktivní programování je programování s proudem událostí.

Větší otázka však zůstává nezodpovězena. Co je funkční reaktivní programování (FRP)?

FRP je kombinací funkčních a reaktivních paradigmat. Jinými slovy, reaguje na datové toky pomocí funkčního paradigmatu. FRP není obslužný program nebo knihovna - mění způsob, jakým architekturujete své aplikace, a způsob, jakým přemýšlíte o svých aplikacích.

V dalším blogu budu hovořit o základních stavebních blocích reaktivního programování - do té doby zůstaňte naladěni a užívejte si čtení :)

Chcete-li mít solidní přehled o reaktivních koncepcích a psát aplikace pro iOS v RxSwift, můžete si přečíst moji knihu: Reaktivní programování v aplikaci Swift 4.

Další mé projekty a kód ke stažení jsou v mém veřejném úložišti githubů

Více o tomto tématu si můžete přečíst zde

Díky za čtení, prosím, podělte se o to, pokud to považujete za užitečné :)