Eine kurze Einführung in Functional Reactive Programming (FRP)

FRP repräsentiert einen Schnittpunkt zweier Programmierparadigmen. Bevor wir uns jedoch eingehender mit den Konzepten befassen, müssen wir einige grundlegende Begriffe genauer kennen.

FRP: auf Ereignisse reagieren

Imperative Programmierung

Traditionell schreiben wir Code, der beschreibt, wie ein Problem gelöst werden soll. Jede Codezeile wird nacheinander ausgeführt, um ein gewünschtes Ergebnis zu erzielen, das als Imperativprogrammierung bezeichnet wird. Das zwingende Paradigma zwingt Programmierer, zu schreiben, wie ein Programm eine bestimmte Aufgabe löst. Beachten Sie, dass in der vorherigen Anweisung das Schlüsselwort "how" lautet.

Hier ist ein Beispiel:

let numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
var numbersLessThanFive = [Int] ()
für Index in 0 .. 

Wie Sie sehen, führen wir nacheinander eine Reihe von Anweisungen aus, um die gewünschte Ausgabe zu erzielen.

Funktionale Programmierung

Funktionale Programmierung ist ein Programmierparadigma, bei dem Sie alles als Ergebnis einer Funktion modellieren, bei der Zustandsänderungen und mutierende Daten vermieden werden. In den folgenden Abschnitten werden Konzepte wie die Zustands- und Datenveränderlichkeit und ihre Bedeutung erörtert, jedoch als Referenz:

  • Betrachten Sie state als eine der verschiedenen Permutationen und Kombinationen, die Ihr Programm zu einem bestimmten Zeitpunkt während seiner Ausführung haben kann
  • Datenveränderlichkeit ist das Konzept, bei dem sich ein bestimmter Datensatz während der Programmausführung über einen bestimmten Zeitraum hinweg ändern kann.

Dasselbe Beispiel, das mit der imperativen Programmierung angegeben wurde, kann mit dem funktionalen Ansatz auf folgende Weise verwendet werden:

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

Wir speisen die Filterfunktion mit einem Verschluss, der ein bestimmtes Kriterium enthält. Dieses Kriterium wird dann auf jedes Element im Zahlenarray angewendet, und das resultierende Array enthält Elemente, die unsere Kriterien erfüllen.

Beachten Sie die Deklaration der beiden Arrays in beiden Beispielen.

Im ersten Beispiel wurde das Array numbersLessThanFive als var deklariert, während im zweiten Beispiel dasselbe Array als let deklariert wurde.

Läutet es ein paar Glocken?

Welcher Ansatz ist besser, mit welchem ​​Array lässt sich sicherer arbeiten?

Was ist, wenn mehr als ein Thread versucht, mit demselben Array und seinen Elementen zu arbeiten?

Ist ein konstantes Array nicht zuverlässiger?

Reaktive Programmierung

Reaktives Programmieren ist die Praxis des Programmierens mit asynchronen Datenströmen oder Ereignisströmen. Ein Ereignis-Stream kann aus Eingaben über die Tastatur, Tastatureingaben, Gesten, GPS-Positionsaktualisierungen, Beschleunigungsmesser und iBeacon bestehen. Sie können einen Stream anhören und entsprechend darauf reagieren.

Sie haben vielleicht von reaktivem Programmieren gehört, aber es hat sich vielleicht zu einschüchternd, beängstigend oder kryptisch angehört, um es überhaupt auszuprobieren. Vielleicht haben Sie so etwas gesehen:

var twoDimensionalArray = [[1, 2], [3, 4], [5, 6]]
Lassen Sie flatArray = twoDimensionalArray.flatMap {array in
    Rückgabe array.map {integer in
        Ganzzahl zurückgeben * 2
    }
}

drucken (flatArray)

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

Auf den ersten Blick mag sich der vorhergehende Code etwas dunkel anfühlen, und dies könnte der Grund sein, warum Sie dieser Art der Programmierung den Rücken gekehrt haben. Reaktives Programmieren ist, wie bereits erwähnt, das Programmieren mit Ereignisströmen.

Die größere Frage bleibt jedoch immer noch unbeantwortet. Was ist funktionale reaktive Programmierung (FRP)?

FRP ist die Kombination von funktionalen und reaktiven Paradigmen. Mit anderen Worten, es reagiert auf Datenströme unter Verwendung des Funktionsparadigmas. FRP ist kein Dienstprogramm oder eine Bibliothek - es ändert die Art und Weise, wie Sie Ihre Anwendungen entwerfen und wie Sie über Ihre Anwendungen nachdenken.

Im nächsten Blog werde ich über grundlegende Bausteine ​​der reaktiven Programmierung sprechen - bis dahin bleibt dran und viel Spaß beim Lesen :)

Um einen guten Überblick über reaktive Konzepte zu haben und iOS-Anwendungen in RxSwift zu schreiben, lesen Sie mein Buch: Reaktive Programmierung in Swift 4.

Weitere meiner Projekte und herunterladbaren Codes befinden sich in meinen öffentlichen Github-Repos

Mehr zum Thema lesen Sie hier

Danke fürs Lesen, bitte teile es, wenn du es nützlich fandest :)