Ich fand es einfacher, zwischen deklarativ und imperativ zu unterscheiden, basierend auf idempotent et kommutativ . Nutzen Sie die Referenzen, um mehr über sie zu erfahren.
Kasse ce vereinfachte Version, um über idempotent zu wissen.
Dann bringe ich die Definition von "WAS" & "WIE" um zu verstehen, was "WAS" & "WIE" tatsächlich bedeuten. Beim deklarativen Ansatz verbinden Sie Daten mit anderen, indem Sie eine Beziehung zwischen ihnen definieren. Sie erwähnen nicht, wie diese Beziehung erreicht werden soll, sondern "WAS" diese Beziehung ist. Durch eine Beziehung beschreiben Sie "WAS" wie Ihre Ausgabedaten aussehen, anstatt "WIE" um diese Ausgabedaten zu erhalten.
Zeichnen Sie in Ihrem Kopf ein paar Diagramme, zeichnen Sie Punkte (Daten) und verbinden Sie sie mit Linien (Beziehungen). Zeichnen Sie auf alle möglichen Arten eins zu viele, viele zu eins und eins zu eins. Versehen Sie diese Linien mit Pfeilen, wie hier <-----------. Alle Pfeile sollten nach links zeigen, weil alle Daten, auf denen ein bestimmter Wert beruht, zuerst berechnet werden müssen und dann nach links gehen, um diesen bestimmten Wert zu berechnen.
Wenn Daten a
stützt sich auf Daten b
Daten c
und Daten d
die sich wiederum auf andere Daten stützen können. Dann b
, c
et d
sollte zuerst berechnet werden und erst dann a
berechnet werden. Also a
befindet sich auf der linken Seite der Linie und alle anderen auf der rechten Seite. Es werden 3 Linien erreicht a
eine aus jeder der b
, c
et d
.
Dieses Diagramm hat einige Eigenschaften:
- KEINE Daten verletzen die Beziehung, die sie zu allen anderen Daten haben
- der Kontrollfluss oder die Reihenfolge spielt natürlich keine Rolle
b
, c
et d
sollte berechnet werden, bevor a
aber es gibt keine Präferenz zwischen b
, c
et d
d.h. es spielt keine Rolle, welcher dieser 3 Werte zuerst berechnet wird ( kommutativ )
a
basiert nur auf b
, c
et d
und niemandem sonst. Daher spielt es keine Rolle, wie oft die Beziehungsoperation, die die a
mit b
, c
et d
ausgeführt wird, dasselbe a
erreicht werden sollte ( idempotent ). a
ist hier das Endergebnis der Beziehungsoperation. Im Grunde genommen ist jeder, der sich auf die a
sollte eine Linie haben, die auf a
.
Diese Beziehungen (Linien) sind wie Funktionen (Funktionen von Mathematik und NICHT Programmierung). Kein Zweifel Funktion al-Programmierung ist unter Akademikern bekannt. Reine Funktionen (aus unserer Programmierung, daher nicht fett gedruckt) sind wie Funktionen (von Mathe, also in fett ).
Mittlerweile klingt deklarativ vielleicht wie PURE und IMMUTABLE (die im Allgemeinen in Funktion al Programming), wenn ja GUT und wenn nein GROSS. Denn das ist nicht das Ziel hier, das ist etwas, das sich automatisch aus diesem Muster ergeben hat.
Wenn Ihr Code in dieses Diagramm umgewandelt werden kann, ist er vollständig deklarativ Andernfalls liegt es irgendwo anders auf der Skala.
Deklarativ ist ähnlich wie Mathe .
Zoomen wir nun in diese Beziehungen (Linien) hinein, um zu sehen, was im Computer während der Programmausführung vor sich geht.
Der Imperativ kommt ins Spiel. Hier wird die Basisarbeit geleistet. Im Imperativ erwähnen Sie Schritt für Schritt "WIE" und Sie wissen, dass diese Abfolge von Schritten die gewünschte Beziehung zwischen den Daten (Eingaben b
c
d
) und andere Daten (Ausgabe a
). Hier können Sie Variablen erstellen, sie verändern, eine Schleife durch ein Array ziehen und vieles mehr.
Der Imperativ liegt nahe an Programmierung .
Anstatt zu sagen, dass ein Programm deklarativ oder imperativ ist, ziehe ich es vor, es auf einer Skala zu sehen, auf der ganz links steht vollständig deklarativ und auf der rechten Seite ist es zwingend erforderlich . Denken Sie daran, dass das Deklarative auf dem Imperativen aufbaut, so dass alles Deklarative, das Sie sehen, eigentlich das Imperative darunter ist. Im Allgemeinen sind Programme eine Mischung aus deklarativ und imperativ.
Nehmen wir nun diese 2 Beispiele :
Das zweite Beispiel kann wie folgt in ein Diagramm umgewandelt werden:
reduce_r
map_r
filter_r
a
<--------- b
<--------- c
<--------- d
- filter_r (Beziehung):
c
ist nur eine gerade Anzahl von d
- map_r (Beziehung):
b
sind alle Zahlen multipliziert mit 10 von c
- reduce_r (Beziehung):
a
sind alle addierten Zahlen von b
Dies sollte wie folgt aussehen Verbundfunktion der Mathematik: reduce_r
( map_r
( filter_r
( d
) ) )
Bei der deklarativen Methode besteht die Aufgabe des Entwicklers darin, das Endziel zu erreichen ( a
) in Teilziele ( b
, c
), die dazu beitragen werden, das Endziel zu erreichen.
natürlich auch unter der Haube der Verfahren Karte , reduzieren. et Filter ist zwingender Code, der ausgeführt wird.
Zum Nachdenken anregen : Wenn Sie eine Annahme treffen müssen über map
Funktion von links nach rechts zu gehen, damit Ihr Code wie erwartet funktioniert, tun Sie eigentlich imperativ im Namen des deklarativen.
Referenzen: purpleidea (James) , www.dataops.live , wiki.c2.com
76 Stimmen
Imperativ geht in ein Restaurant und bestellt ein Steak (blutig gebraten), Pommes frites (mit Ketchup), einen Beilagensalat (mit Ranch) und eine Cola (ohne Eis). Der Kellner liefert ihm genau das, was er bestellt hat, und berechnet ihm 14,50 Dollar. Auf der anderen Seite, Deklarativ geht in ein Restaurant und sagt dem Kellner, dass er nur etwa 12 Dollar für das Abendessen bezahlen möchte und Lust auf Steak hat. Der Kellner kommt mit einem Steak (medium gegart), Kartoffelpüree, gedünstetem Brokkoli, einem Brötchen und einem Glas Wasser zurück. Ihm werden 11,99 Dollar berechnet.
3 Stimmen
Ein weiteres gutes Beispiel, das ich gefunden habe, ist vielleicht, wie Sie Docker-Dateien und Befehle tun... z.B. ein imperativer Ansatz ist, dass Sie alle Ihre Schritte nacheinander in der Befehlszeile definieren, z.B. erstellen Sie einen Container in aws, erstellen Sie ein Netzwerk und dann setzen Sie Ihre Ressourcen irgendwie zusammen... der DECLARATIVE Ansatz wäre dann: Sie DECLARE eine Dockerdatei (oder docker-compose.yaml), wo Sie im Wesentlichen alle Ihre Befehle (oder Sie nur benennen, was Sie wollen, dass es zu tun) innerhalb einer Datei, und dann einfach diese Datei ausführen. Seine deklariert alle auf einmal vorher, so sollte es immer ähnlich verhalten.
1 Stimmen
Sie können die Natur eines deklarativen Programms und der deklarativen Programmierung besser verstehen, wenn Sie sie als einen Konfigurations- und Konfigurationsprozess betrachten.