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.

46voto

Lucent Fox Punkte 1647

Der Unterschied hat hauptsächlich mit dem allgemeinen Abstraktionsniveau zu tun. Bei deklarativen Programmen ist man irgendwann so weit von den einzelnen Schritten entfernt, dass das Programm einen großen Spielraum hat, wie es zu seinem Ergebnis kommt.


Man könnte jede Unterweisung als eine Art Kontinuum betrachten:

Grad der Abstraktion:

Declarative <<=====|==================>> Imperative

Deklaratives Beispiel aus der realen Welt:

  1. Bibliothekar, bitte leihen Sie mir ein Exemplar von Moby Dick aus. (Der Bibliothekar wählt nach eigenem Ermessen die beste Methode, um die Anfrage zu erfüllen)

Imperatives Beispiel aus der Praxis:

  1. In die Bibliothek gehen
  2. Find Book Organization System (Kartenkatalog - Alte Schule)
  3. Recherchieren Sie, wie man Kartenkataloge benutzt (Sie haben es auch vergessen, oder?)
  4. Finden Sie heraus, wie die Regale beschriftet und organisiert sind.
  5. Finden Sie heraus, wie die Bücher in einem Regal angeordnet sind.
  6. Vergleichen Sie den Standort des Buches aus dem Zettelkatalog mit dem Organisationssystem, um das Buch zu finden.
  7. Bringen Sie das Buch zum Ausgabesystem.
  8. Lesen Sie das Buch.

1 Stimmen

Geht es hier nicht eher um Abstraktion als um deklarativ/imperativ? Sie fordern den Bibliothekar immer noch auf, das Buch zu bringen.

0 Stimmen

Die Antwort wurde aktualisiert, um sie vollständiger zu machen und diesen Aspekt in die Lösung aufzunehmen.

5 Stimmen

Daran ist etwas dran, aber es ist keine vollständige Definition. Bei der deklarativen Programmierung geben Sie das Endziel an, ohne sich um den Ausgangspunkt zu kümmern. Bei der imperativen Programmierung ist ein definierter Startpunkt wichtig. Es ist wie der Unterschied zwischen der Angabe einer Adresse und einer Wegbeschreibung. Die Adresse ist nützlich, egal wo man sich befindet. Eine Wegbeschreibung hingegen ist ungültig, wenn man irgendwo anders beginnt.

38voto

ROMANIA_engineer Punkte 50874

Mir gefiel eine Erklärung aus einem Cambridge-Kurs und deren Beispiele:

  • Deklarativ - angeben was zu tun, nicht wie um es zu tun
    • Z.B.: HTML beschreibt, was auf einer Webseite erscheinen soll, nicht wie sie auf dem Bildschirm gezeichnet werden soll
  • Imperativ - beides angeben was et 何ゆえ
    • int x; - was (deklarativ)
    • x=x+1; - wie

0 Stimmen

"nicht so, wie es auf dem Bildschirm dargestellt werden sollte" ... Bedeutet das also, dass CSS es Imperativ dann?

19 Stimmen

Nein. Es kann auch als deklarativ weil du einfach sagst was Sie wollen - "Diese Zelle blau umranden" . Stellen Sie sich vor, dass Sie denselben Rahmen in einem imperativen Ansatz (z. B. JavaScript) zeichnen möchten. Dann müssen Sie sagen "Gehe zum Punkt (x1,y1), zeichne eine blaue Linie zwischen diesem Punkt und (x2,y1), zeichne eine blaue Linie von (x2,y1) nach (x2,y2), zeichne eine blaue Linie von (x2,y2) nach (x1,y2), zeichne eine blaue Linie von (x1,y2) nach (x1,y1)" .

0 Stimmen

@ROMANIA_engineer, Wo kann ich einen solchen Cambridge-Kurs finden, bitte?

30voto

GorkemHalulu Punkte 2705

Bei der imperativen Programmierung müssen die Entwickler Schritt für Schritt festlegen, wie Code ausgeführt werden soll. Um eine Anweisung in einer imperativen Weise zu geben, Sie sagen: "Fahren Sie zur 1st Street, biegen Sie links in die Main Street ein und fahren Sie zwei Blocks, biege rechts in die Maple ein und halte am dritten Haus auf der linken Seite". Die deklarative Version könnte etwa so klingen: "Fahr zu Sue's Haus." Die eine sagt, wie etwas zu tun ist; die andere sagt, was getan werden muss. getan werden muss.

Der deklarative Stil hat zwei Vorteile gegenüber dem imperativen Stil:

  • Es zwingt den Reisenden nicht dazu, sich eine lange Reihe von Anweisungen zu merken.
  • Sie ermöglicht es dem Reisenden, die Route nach Möglichkeit zu optimieren.

Calvert,C Kulkarni,D (2009). Wesentliche LINQ. Addison Wesley. 48.

12voto

Stehlen von Philip Roberts hier :

  • Imperative Programmierung sagt der Maschine, wie sie etwas tun soll (was zu dem führt, was Sie wollen)
  • Bei der deklarativen Programmierung teilt man der Maschine mit, was man möchte (und der Computer findet heraus, wie er es tun soll)

Zwei Beispiele:

1. Verdoppelung aller Zahlen in einer Matrix

Unbedingt:

var numbers = [1,2,3,4,5]
var doubled = []

for(var i = 0; i < numbers.length; i++) {
  var newNumber = numbers[i] * 2
  doubled.push(newNumber)
}
console.log(doubled) //=> [2,4,6,8,10]

Deklarativ:

var numbers = [1,2,3,4,5]

var doubled = numbers.map(function(n) {
  return n * 2
})
console.log(doubled) //=> [2,4,6,8,10]

2. Summierung aller Elemente in einer Liste

Unbedingt

var numbers = [1,2,3,4,5]
var total = 0

for(var i = 0; i < numbers.length; i++) {
  total += numbers[i]
}
console.log(total) //=> 15

Deklarativ

var numbers = [1,2,3,4,5]

var total = numbers.reduce(function(sum, n) {
  return sum + n
});
console.log(total) //=> 15

Beachten Sie, dass bei den imperativen Beispielen eine neue Variable erstellt, verändert und der neue Wert zurückgegeben wird (d. h. wie etwas geschieht), während bei den deklarativen Beispielen eine bestimmte Eingabe ausgeführt wird und der neue Wert auf der Grundlage der ursprünglichen Eingabe zurückgegeben wird (d. h. was geschehen soll).

11 Stimmen

Wie bei erschreckend vielen Antworten auf diese Frage ist auch Ihr Beispiel für "deklarative" Programmierung ein Beispiel für funktionale Programmierung. Die Semantik von "map" ist "wende diese Funktion auf die Elemente des Arrays in dieser Reihenfolge an". Sie lassen der Laufzeit keinen Spielraum bei der Reihenfolge der Ausführung.

11voto

McKay Punkte 12080

Imperative Programmierung bedeutet, dem Computer ausdrücklich mitzuteilen, was er tun soll und wie er es tun soll, z. B. durch Angabe der Reihenfolge und dergleichen.

C#:

for (int i = 0; i < 10; i++)
{
    System.Console.WriteLine("Hello World!");
}

Deklarativ ist, wenn man dem Computer sagt, was er tun soll, aber nicht, wie er es tun soll. Datalog / Prolog ist die erste Sprache, die mir in diesem Zusammenhang einfällt. Im Grunde ist alles deklarativ. Man kann die Reihenfolge nicht wirklich garantieren.

C# ist eine eher imperative Programmiersprache, aber bestimmte C#-Funktionen sind eher deklarativ, wie Linq

dynamic foo = from c in someCollection
           let x = someValue * 2
           where c.SomeProperty < x
           select new {c.SomeProperty, c.OtherProperty};

Das Gleiche könnte man auch als Imperativ schreiben:

dynamic foo = SomeCollection.Where
     (
          c => c.SomeProperty < (SomeValue * 2)
     )
     .Select
     (
          c => new {c.SomeProperty, c.OtherProperty}
     )

(Beispiel aus wikipedia Linq)

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