832 Stimmen

Was ist der Unterschied zwischen dem deklarativen und dem imperativen Paradigma in der Programmierung?

Ich habe im Internet nach einer Definition für folgende Begriffe gesucht deklarativ et Imperativ Programmierung, die mir etwas Licht ins Dunkel bringen würde. Allerdings ist die Sprache, die bei einigen der Ressourcen, die ich gefunden habe, verwendet wird, entmutigend - zum Beispiel bei Wikipedia . Hat jemand ein Beispiel aus der Praxis, das er mir zeigen könnte und das dieses Thema aus einer anderen Perspektive beleuchten könnte (vielleicht in C#)?

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.

10voto

kvedananda Punkte 303

Imperative Programmierung - Sie schreiben den Code, der die Arbeit erledigt

Deklarative Programmierung - jemand anderes schreibt den Code, der die Arbeit erledigt

9voto

kervin Punkte 11462

In der Informatik ist die deklarative Programmierung ein Programmierparadigma, das die Logik einer Berechnung ausdrückt, ohne ihren Kontrollfluss zu beschreiben.

De http://en.wikipedia.org/wiki/Declarative_programming

Kurz gesagt, die deklarative Sprache ist einfacher, weil ihr die Komplexität des Kontrollflusses (Schleifen, if-Anweisungen usw.) fehlt.

Ein guter Vergleich ist das ASP.Net "code-behind" Modell. Sie haben deklarative '.ASPX'-Dateien und dann die imperativen 'ASPX.CS'-Codedateien. Ich stelle oft fest, dass, wenn ich alles, was ich brauche, in der deklarativen Hälfte des Skripts tun kann, viel mehr Leute folgen können, was getan wird.

6voto

Premraj Punkte 65511

Imperative Programmierung
Eine Programmiersprache, die Programmierdisziplin erfordert, wie z. B. C/C++, Java, COBOL, FORTRAN, Perl und JavaScript. Programmierer, die in solchen Sprachen schreiben, müssen eine richtige Reihenfolge von Aktionen entwickeln, um das Problem zu lösen, basierend auf einem Wissen über Datenverarbeitung und Programmierung.

Deklarative Programmierung
Eine Computersprache, bei der keine traditionelle Programmierlogik geschrieben werden muss; Die Benutzer konzentrieren sich auf die Definition der Eingabe und Ausgabe und nicht auf die Programmschritte, die in einer prozeduralen Programmiersprache wie C++ oder Java erforderlich sind.

Beispiele für deklarative Programmierung sind CSS, HTML, XML, XSLT, RegX.

4voto

yaccob Punkte 1031

Es wurden bereits viele Code-Beispiele hinzugefügt, daher werde ich kein weiteres hinzufügen.
Stattdessen werde ich versuchen, den Unterschied zwischen den beiden Ansätzen auf eine Art und Weise zu erklären, die meiner Meinung nach ihr Wesen deutlicher macht als die meisten der kursierenden Definitionen:

  • A deklarativ Ansatz konzentriert sich auf die Zweck eines bestimmten Algorithmus, der oft den Algorithmus selbst verbirgt.

  • Eine Imperativ Ansatz konzentriert sich auf die Algorithmus für einen bestimmten Zweck, der oft den eigentlichen Zweck verdeckt.

4voto

Aman Godara Punkte 154

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

0 Stimmen

Manchmal hängt es auch von der Art und Weise ab, wie eine Person etwas betrachtet, man könnte es als Imperativ und jemand anderes könnte das Gleiche nennen deklarativ . Jemand könnte sagen, dass reduce nur eine abstrahierte Version von "Schleife durch das Array von links nach rechts und Aufruf Reduzierstück (imperativ) und jemand anderes könnte es so erklären, wie ich es oben in meinem Beitrag getan habe, ohne sich um die Reihenfolge zu kümmern, in der die Zahlen hinzugefügt werden (deklarativ). Eine gute Reduzierstück erfüllt die Eigenschaften der Kommutativ- und Assoziativität, z. B: hinzufügen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X