Frage

Ich höre immer wieder dieser Begriff geworfen um in verschiedenen Kontexten. Was ist das?

War es hilfreich?

Lösung

deklarative Programmierung ist, wenn Sie Ihren Code so schreiben, dass es beschreibt, was Sie tun wollen, und nicht, wie Sie es tun wollen. Es bleibt den Compiler, um den wie herauszufinden.

Beispiele für deklarative Programmiersprachen sind SQL und Prolog.

Andere Tipps

Die anderen Antworten bereits einen fantastischen Job tun zu erklären, was deklarative Programmierung ist, so werde ich nur einige Beispiele dafür, warum das nützlich sein könnte.

Kontext Independence

deklarative Programme sind kontextunabhängige . Weil sie nur erklären, was das ultimative Ziel ist, aber nicht die Zwischenschritte, um dieses Ziel zu erreichen, kann das gleiche Programm in verschiedenen Kontexten verwendet werden. Das ist schwer mit zwingend notwendig, Programme zu tun , weil sie auf dem Kontext oft abhängen (z versteckten Zustand).

Nehmen Sie yacc als Beispiel. Es ist ein Parser-Generator aka. Compiler-Compiler, ein externer deklarative DSL zur Beschreibung der Grammatik der Sprache, so daß ein Parser für diese Sprache automatisch aus der Beschreibung erzeugt werden. Wegen seiner Zusammenhang Unabhängigkeit, können Sie viele verschiedene Dinge mit einer solchen Grammatik tun:

  • Erstellen Sie einen C-Parser für die Grammatik (der ursprüngliche Anwendungsfall für yacc)
  • Erstellen Sie einen C ++ Parser für die Grammatik
  • Erstellen Sie einen Java-Parser für die Grammatik (mit Jay)
  • Erstellen Sie ein C # Parser für die Grammatik (mit GPPG)
  • Erstellen Sie einen Ruby-Parser für die Grammatik (mit Racc)
  • Erstellen Sie einen Baum Visualisierung für die Grammatik (mit GraphViz)
  • Sie einfach ein paar ziemlich Druck, fancy-Formatierung und Syntax-Hervorhebung der yacc Quelldatei selbst und schließen Sie es in Ihrem Referenzhandbuch als syntaktische Spezifikation Ihrer Sprache

Und viel mehr ...

Optimierung

Weil Sie den Computer nicht vorschreiben, welche Schritte zu ergreifen und in welcher Reihenfolge, kann es neu anordnen Ihr Programm viel freien, vielleicht sogar einige Aufgaben parallel ausführen. Ein gutes Beispiel ist ein Anfrageplaner und Abfrage-Optimierer für eine SQL-Datenbank. Die meisten SQL-Datenbanken können Sie die Abfrage angezeigt werden, dass sie wirklich gegen den Rest der Abfrage ausgeführt, dass Sie fragte , um sie auszuführen. Oft sehen diese Abfragen nichts wie jeder andere. Der Anfrageplaner nimmt die Dinge zu berücksichtigen, dass Sie nicht einmal geträumt haben würde: Rotationslatenzzeit der Plattenscheibe, zum Beispiel oder die Tatsache, dass einige ganz andere Anwendung für eine völlig andere Benutzer gerade eine ähnliche Abfrage und die Tabelle ausgeführt, dass Sie Verbinden mit und dass Sie so hart gearbeitet Belastung zu vermeiden, ist bereits im Speicher sowieso.

Es gibt einen interessanten Kompromiss hier: die Maschine hat, härter zu arbeiten, um herauszufinden, wie etwas zu tun, als wäre es in einer imperativen Sprache, aber wenn es hat es herausfinden, es viel mehr Freiheit hat und viele weitere Informationen für die Optimierungsphase.

Lose:

deklarative Programmierung zustrebt: -

  • Sets von Erklärungen oder deklarativen Anweisungen, von denen jede (oft im Problembereich) hat Bedeutung und können unabhängig und isoliert verstanden werden.

Imperative Programmierung zustrebt: -

  • Die Sequenzen von Befehlen, von denen jeder eine Aktion auszuführen; aber das kann oder nicht haben im Problembereich bedeutet.

Als Ergebnis ein Imperativ Stil hilft den Leser, die Mechanik zu verstehen, was das System tatsächlich tut, kann aber geben wenig Einblick in das Problem, dass es beabsichtigt ist, zu lösen. Auf der anderen Seite hilft ein deklarativer Stil den Leser das Problem Domain und den Ansatz zu verstehen, dass das System zur Lösung des Problems führt, ist aber weniger informativ über die Angelegenheit der Mechanik.

Echt Programme (auch solche, die in Sprachen geschrieben, die die Enden des Spektrums, wie ProLog oder C begünstigen) neigen dazu, beide Stile an verschiedenen Stellen vorhanden, um verschiedene Grade zu haben, die unterschiedlichen Komplexitäten und Kommunikationsbedürfnisse des Stückes zu befriedigen. Ein Stil ist nicht besser als die andere; sie dienen nur verschiedene Zwecke, und, wie bei vielen Dingen im Leben, Mäßigung Schlüssel ist.

Es tut mir leid, aber ich muss mit vielen der anderen Antworten nicht einverstanden sind. Ich mag dieses verfahrene Mißverständnis der Definition der deklarativen Programmierung beenden.

Definition

Referenz Transparenz (RT) der Unterausdrücke ist die nur erforderlich Attribut eines deklarativen Programmierung Ausdruck , denn es ist das einzig Attribut, das mit imperativen Programmierung ist nicht freigegeben.

Andere zitierten Attribute deklarative Programmierung, ergeben sich aus dieser RT. Bitte klicken Sie auf den Hyper-Link oben für die ausführliche Erklärung.

Tabelle Beispiel

Zwei Antworten Tabelle Programmierung erwähnt. In den Fällen, in denen die Tabelle Programmierung (auch bekannt als Formeln) nicht wandelbar Zugriff global Zustand, dann ist es deklarative Programmierung. Dies liegt daran, die veränderbaren Zellenwerte sind die monolithische input und Ausgang des main() (das gesamte Programm). Die neuen Werte sind nicht auf die Zellen geschrieben, nachdem jede Formel ausgeführt wird, so sind sie nicht wandelbar für das Leben des deklarativen Programms (Ausführung aller Formeln in der Tabelle). Somit relativ zueinander, zeigen die Formeln diese wandelbaren Zellen als unveränderlich. Eine RT-Funktion zugreifen darf unveränderlich globaler Zustand (und auch wandelbar local Zustand ).

Damit die Möglichkeit, die Werte in den Zellen zu mutieren, wenn das Programm beendet wird (als eine Ausgabe von main()), nicht sie wandelbar gespeicherten Werten im Rahmen der Vorschriften machen. Der Hauptunterschied ist der Zellenwert nicht aktualisiert werden, nach jeder Tabellenformel durchgeführt wird, damit die Reihenfolge der Formeln Durchführung spielt keine Rolle. Die Zellenwerte werden aktualisiert, nachdem alle deklarativen Formeln durchgeführt wurden.

Hier ist ein Beispiel.

In CSS (auf Stil HTML-Seiten verwendet wird), wenn Sie ein Bildelement wollen 100 Pixel hoch und 100 Pixel breit sein, geben Sie einfach „erklären“, dass das, was Sie wollen, wie folgt:

#myImageId {
height: 100px;
width: 100px;
}

Sie können betrachten CSS eine deklarative "Stylesheet" Sprache.

Der Browser-Engine, die liest und interpretiert diese CSS ist kostenlos das Bild erscheinen diese groß und diese breit jedoch machen es will. Verschiedene Browser-Engines (zum Beispiel der Motor für IE, dass der Motor für Chrome) wird diese Aufgabe anders umzusetzen.

Ihre einzigartigen Implementierungen sind, natürlich nicht in einer deklarativen Sprache geschrieben, aber in einem prozeduralen einen wie Assembler, C, C ++, Java, JavaScript oder Python. Dieser Code ist ein Bündel von Schritten, Schritt für Schritt durchgeführt werden (und möglicherweise Funktionsaufrufe umfasst). Es könnte Dinge wie interpolieren Pixelwerte tun, und macht auf dem Bildschirm.

deklarative Programmierung ist das Bild, in dem imperativen Programmierung ist, Anweisungen für das Bild zu malen.

Sie sind in einem deklarativen Stil zu schreiben, wenn Sie „es zu sagen, was es ist“, anstatt die Schritte, um den Computer zu beschreiben sollte zu bekommen, wo Sie es wollen.

Wenn Sie XML verwenden, um Daten zu markieren-up, die Sie verwenden deklarative Programmierung, weil Sie sagen, „Das ist eine Person, dass ein Geburtstag, und da drüben ist eine Adresse“.

Einige Beispiele, wo deklarative und imperative Programmierung für größere Wirkung kombiniert erhalten:

  • Windows Presentation Foundation verwendet deklarative XML-Syntax zu beschreiben, was eine Benutzeroberfläche aussieht, und was die Beziehungen (Bindungen) sind zwischen den Kontrollen und die zugrunde liegenden Datenstrukturen.

  • Strukturierte Konfigurationsdateien verwenden deklarative Syntax (so einfach als „Schlüssel = Wert“ -Paare) zu identifizieren, was ein String oder Wert der Daten bedeutet.

  • HTML markiert up Text mit Tags, die, welche Rolle jedes Stück Text in Bezug hat auf das gesamte Dokument.

  • beschreiben

vorstellen, eine Excel-Seite. Mit Spalten mit Formeln bevölkerten Sie Steuererklärung zu berechnen.

Die ganze Logik in den Zellen erklärt erfolgt ist, wird die Reihenfolge der Berechnung durch die durch die Formel selbst bestimmen eher prozedural als.

Das ist eine Art, was deklarative Programmierung geht. Sie erklären das Problem Raum und die Lösung anstelle der Ablauf des Programms.

Prolog ist die einzige Sprache, die ich deklarative Verwendung habe. Es erfordert eine andere Denkweise, aber es ist gut zu lernen, wenn nur Sie andere als die typische prozedurale Programmiersprache, um etwas zu belichten.

Da ich meine vorherige Antwort schrieb, habe ich eine neue Definition der deklarativen Eigenschaft, die unten zitiert wird. Ich habe auch zwingend notwendig, Programmierung als Dual-Eigenschaft definiert.

Diese Definition ist besser als das, was ich in meiner früheren Antwort zur Verfügung gestellt, weil es prägnant ist und es ist allgemeiner. Aber es kann schwieriger sein, grok, weil die Auswirkungen der Unvollständigkeitssätze für die Programmierung und das Leben im Allgemeinen sind schwierig für die Menschen ihrer Meinung umwickeln.

Die zitierte Erklärung der Definition diskutiert die Rolle rein funktionale Programmierung spielt in deklarative Programmierung.

  

deklarative vs. Imperative

     

Die deklarative Eigenschaft ist seltsam, stumpf und schwer in einer technisch präzisen Definition zu erfassen, die allgemeinen und nicht mehrdeutig bleibt, weil es eine naive Vorstellung, dass wir die Bedeutung (auch bekannt als Semantik) des Programms ohne entstehen unbeabsichtigte Neben erklären können Auswirkungen. Es ist eine inhärente Spannung zwischen der Expression von Bedeutung und die Vermeidung von unbeabsichtigten Auswirkungen, und diese Spannung ergibt sich eigentlich aus der Unvollständigkeitssätze der Programmierung und unseres Universums.

     

Es Simplifizierung ist, technisch ungenau und oft mehrdeutig deklarativen als zu definieren „, was zu tun und zwingend notwendig, wie wie zu tun . Ein mehrdeutiger Fall ist das „ was “ ist das „ wie “ in einem Programm, das einem programm einen Compiler ausgibt.

     

Offenbar ist die unbegrenzte Rekursion, die eine Sprache Turing komplette macht, ist auch analog das in semantics- nicht nur in der syntaktischen Struktur der Auswertung (auch bekannt als Betrieb Semantik). Dies ist logisch ein Beispiel analog zu Gödels theorem- „ jedes komplettes System der Axiome ist auch inkonsistent “. Betrachtet die widersprüchliche Seltsamkeit dieses Zitats! Es ist auch ein Beispiel, das zeigt, wie der Ausdruck der Semantik nicht beweisbar gebunden hat, so können wir nicht a href beweisen <= "http://en.wikipedia.org/wiki/Halting_problem#Relationship_with_G.C3.B6del. 27s_incompleteness_theorems“rel = "nofollow noreferrer"> 2 , dass ein Programm (und seine Semantik analog) halt auch bekannt als der Halting Satz.

     

Die Unvollständigkeitssätze von der grundlegenden Natur unseres Universums ableiten, die in dem zweiten Hauptsatz der Thermodynamik erklärt wie „ die Entropie (auch bekannt als die Anzahl der unabhängigen Möglichkeiten) ist auf maximalen Trending für immer “. Die Codierung und Design eines Programms finished- nie es lebt - weil es versucht, brauchen eine reale Welt zu begegnen, und die Semantik der realen Welt immer verändern und zu mehr Möglichkeiten Trending. Menschen nie aufhören, neue Dinge zu entdecken (einschließlich Fehler in Programmen; -).

     

Um präzise und technisch erfassen diese vorgenannten gewünschten Begriff in diesem seltsamen Universum, die keinen Rand hat (das darüber nachzudenken! Gibt es kein „außerhalb“ unseres Universums), erfordert eine knappe, aber täuschend-nicht-einfache Definition, die bis falsch klingen es wird erklärt, tief.

     

Definition:

     
    
         

Die deklarative Eigenschaft ist, wo es nur einen möglichen Satz von Aussagen bestehen, die jeweils spezifische modulare semantische ausdrücken kann.

         

Der Imperativ Eigenschaft 3 ist das duale, wo Semantik sind inkonsistent unter Zusammensetzung und / oder mit Variationen von Sätzen von Aussagen zum Ausdruck gebracht werden.

         
  
     Diese Definition von deklarativen

ist unverwechselbar local in semantischen Rahmen, was bedeutet, dass es erfordert, dass ein modularer seine konsequente Bedeutung semantische hält unabhängig davon, wo und wie es instanziiert und verwendete in global Umfang. Somit ist jede deklarative modulare semantische sollte intrinsisch orthogonal sein, alle möglichen andere- und nicht unmöglich (wegen Unvollständigkeitssätze) global Algorithmus oder Modell für die Konsistenz Zeugen, die auch der Punkt „ Mehr ist nicht immer besser “von Robert Harper, Professor für Informatik an der Carnegie Mellon University, einer der Designer von Standard ML.

     

Beispiele für diese modularen deklarative Semantik umfassen Kategorientheorie functors z.B. der Applicative , nominal Typisierung, Namespaces, benannte Felder und w.r.t. auf operative Ebene der Semantik dann rein funktionale Programmierung.

     

So gut deklarative entworfen Sprachen können deutlicher ausdrücken Bedeutung , wenn auch mit einem gewissen Verlust der Allgemeinheit in dem, was ausgedrückt werden kann, noch ein Gewinn in dem, was mit intrinsischer Konsistenz ausgedrückt werden.

     

Ein Beispiel für die zuvor erwähnten Definition des Satz von Formeln in den Zellen eines Tabellenkalkulations Program- ist, die nicht erwartet werden, die gleiche Bedeutung zu geben, wenn an verschiedenen Spalten- und Zeilen Zellen bewegt, d.h. Zellidentifikatoren verändert. Die Zellidentifikatoren sind Teil und nicht überflüssig zu der beabsichtigten Bedeutung. So wird jede Tabelle Ergebnis ist einzigartig w.r.t. zu den Zellkennungen in einer Reihe von Formeln. Die konsequent modulare semantisch in diesem Fall ist die Verwendung von Zellkennungen als Eingabe und Ausgabe von rein Funktionen für Zellen Formeln (siehe unten).

     

Hyper Text Markup Language aka HTML- die Sprache für statisches Web Pages- ist ein Beispiel für eine sehr (aber nicht perfekt 3 ) deklarative Sprache, die (zumindest vor HTML 5) nicht die Fähigkeit hatte dynamisches Verhalten zum Ausdruck bringen. HTML ist vielleicht die einfachste Sprache zu lernen. Für dynamisches Verhalten, eine imperativ Skriptsprache wie JavaScript wurde in der Regel mit HTML kombiniert. HTML ohne JavaScript passt die deklarative Definition, da jeder Nenntyp (das heißt die Tags) innerhalb der Regeln der Syntax ihrer konsequenten Bedeutung unter Zusammensetzung aufrechterhält.

     

Eine konkurrierende Definition für deklarative ist die commutative und gekoppelt   beabsichtigte Ergebnisse , d.h. konsistente syntaktische Semantik dass die Fremd beseitigen, so kann man leicht   begreifen Code, nachdem sie es vergessen haben. Copute und Haskell erzwingen   Determinismus der operationellen Semantik und fördern „ nicht wiederholen   “(DRY) selbst, weil sie nur das rein funktionale Paradigma ermöglichen.

     
     

2 Selbst dort, wo können wir die Semantik beweisen ein Programm, zB mit der Sprache Coq, dann ist dies die Semantik beschränkt, die in die Typisierung ausgedrückt werden , und tippen kann niemals die gesamte Semantik eines Programm- nicht einmal für Sprachen erfassen, die nicht Turing vollständig sind, zB mit HTML + CSS ist es möglich, inkonsistent Kombinationen auszudrücken, die somit nicht definiert Semantik haben.

     

3 Viele Erklärungen behaupten fälschlicherweise, dass nur imperativen Programmierung hat syntaktisch Aussagen bestellt . Ich erklärte dies Verwirrung zwischen Imperativ und funktionaler Programmierung . Zum Beispiel ist die Reihenfolge der HTML-Anweisungen nicht die Konsistenz ihrer Bedeutung reduzieren.


Edit: Ich stellte die folgender Kommentar Robert Harper Blog:

  
    

in der funktionalen Programmierung ... der Bereich der Veränderung einer Variablen ist eine Art

  
     

Je nachdem, wie unterscheidet man funktional von Imperativ   Programmierung, Ihr ‚zuweisbare‘ in einem imperativen Programm kann auch haben   eine Art einer Schranke für seine Variabilität Stellen.

     

Die einzige nicht-verworren Definition, die ich zur Zeit für die funktionellen schätzen   Programmierung ist a) funktioniert als erstklassige Objekte und Typen, b)   Präferenz für Rekursion über Schleifen und / oder c) reine Functions- d.h.   diejenigen Funktionen, welche die gewünschte Semantik der nicht auswirken   Programm, wenn memoized ( somit vollkommen rein funktionaler   Programmierung existiert nicht in einer allgemeinen Zweck denotational Semantik   aufgrund von Auswirkungen der Betriebssemantik, z.B. Erinnerung   Zuordnung ).

     

Die idempoZelt Eigenschaft einer reinen Funktion bedeutet, den Funktionsaufruf auf   seine Variablen können durch ihren Wert ersetzt werden, die nicht allgemein ist   der Fall für die Argumente eines Imperativs Verfahren. reine Funktionen   scheinen deklarative w.r.t. zu sein zu den unzusammengesetzte Zustandsübergänge   zwischen den Eingangs- und Ergebnistypen.

     

Aber die Zusammensetzung der reinen Funktionen aufrechtzuerhalten keine solche   Konsistenz, weil es möglich ist, eine Nebenwirkung (global zu modellieren   state) zwingend notwendig Prozess in einer reinen funktionalen Programmiersprache,   z.B. Haskells IOMonad und darüber hinaus ist es völlig unmöglich,   tut so in jeder Turing vollständig rein funktionalen Programmierung verhindern   Sprache.

     

Wie ich schrieb im Jahr 2012 die scheint der ähnlichen Konsens   Kommentare in Ihre aktuellen Blog , dass deklarative Programmierung ist ein   versuchen, den Begriff zu erfassen, dass die beabsichtigte Semantik ist nie   undurchsichtig. Beispiele von opaker Semantik sind abhängig von Ordnung,   Abhängigkeit von Löschung höherer Ebene Semantik auf dem operativen   Semantik-Schicht (z.B. Abgüsse sind nicht Umwandlungen und verdinglichter generics   begrenzen geordnete Semantik ), und die Abhängigkeit von variablen Werten   die überprüft werden können (erwies sich als richtig) von der Programmiersprache.

     

So habe ich festgestellt, dass nur nicht-Turing komplette Sprachen sein können   deklarativ.

     

So ein eindeutiges und deutliches Attribut einer deklarativen Sprache   könnte sein, dass sein Ausgang eine zählbare Menge von bewiesen werden kann, gehorchen   generative Regeln. Zum Beispiel für ein bestimmtes HTML-Programm (ohne Berücksichtigung   Unterschiede in der Art Dolmetscher abweichen), die nicht scripted   (Das heißt nicht Turing vollständig) dann seine Ausgabe Variabilität kann   abzählbar. Oder kurz und bündig ein HTML-Programm ist eine reine Funktion von   seine Variabilität. ein Tabellenkalkulationsprogramm Ditto ist eine reine Funktion der   Eingangsgrößen.

     

So scheint es mir, dass deklarative Sprachen sind das Gegenteil von    unbegrenzte Rekursion , das heißt pro Gödelsche zweite Unvollständigkeit   Satz selbstbezüglicher Sätze können nicht nachgewiesen werden.

     

Lesie Lamport schrieb ein Märchen darüber, wie Euklid haben könnte   auf mathematische Beweise angewendet Gödels Unvollständigkeitssätze umgingen   in der Programmiersprache Kontext von auf Kongruenz zwischen Arten und   Logik (Curry-Howard Korrespondenz, etc).

Es ist eine Methode der Programmierung auf Basis der Beschreibung was etwas sollte stattdessen tun oder sein beschreiben wie es sollte funktionieren.

Mit anderen Worten, Sie nicht schreiben Algorithmen von Ausdrücken aus, die Sie gerade Layout, wie Sie die Dinge sein wollen. Zwei gute Beispiele sind HTML und WPF.

Dieser Wikipedia-Artikel ist ein guter Überblick: http://en.wikipedia.org/wiki/Declarative_programming

Die Beschreibung an einen Computer, was Sie wollen, nicht wie etwas zu tun.

Ich habe mein Verständnis von deklarative Programmierung verfeinert, seit Dezember 2011, als ich zur Verfügung gestellt eine Antwort auf diese Frage. Hier folgt mein gegenwärtiges Verständnis.

Die lange Version meines Verständnisses (Forschung) auf diesen Link , die Sie sollten ein tiefes Verständnis für die Zusammenfassung zu gewinnen habe ich gelesen, unten bieten.

Imperative Programmierung ist, wo wandelbarer Zustand gespeichert und gelesen werden, so dass die Bestellung und / oder Vervielfältigung von Programmanweisungen kann das Verhalten (Semantik) des Programms ändern (und sogar dazu führen, einen Fehler, das heißt unbeabsichtigtes Verhalten).

In dem naiven und extremen Sinne (die ich in meiner früheren Antwort behauptete), deklarative Programmierung (DP) ist all gespeicherten wandelbaren Zustand zu vermeiden, damit die Bestellung und / oder Vervielfältigung von Programmanweisungen kann nicht das Verhalten (Semantik) des Programms verändern.

Allerdings ist eine solche extreme Definition wäre nicht sehr sinnvoll sein, in der realen Welt, da fast jedes Programm wandelbar Zustand gespeichert beinhaltet. Die Tabellenkalkulations Beispiel entspricht dieser extremen Definition von DP, da der gesamte Programmcode zur Vervollständigung mit einem statischen Kopie des Laufes wird Eingangszustand, bevor die neuen Zustände gespeichert werden. Dann, wenn jeder Zustand geändert wird, wird dieser wiederholt. Aber die meisten realen Welt-Programme können nicht auf eine solche monolithische Modell von Zustandsänderungen begrenzt werden.

Eine nützliche Definition von DP ist, dass die Bestellung und / oder Vervielfältigung von Programmanweisungen ändert keine undurchsichtige Semantik. Mit anderen Worten, es gibt keine zufälligen Veränderungen in der Semantik occurring-- versteckt alle Änderungen in Programmanweisung Reihenfolge und / oder Vervielfältigung Ursache nur bestimmt und transparent Änderungen an das Verhalten des Programms.

Der nächste Schritt wäre, über die Programmiermodelle zu sprechen oder in DP Paradigmen Hilfe, aber das ist hier nicht die Frage.

deklarative Programmierung ist Programmierung mit Erklärungen, das heißt Aussagesätze. Deklarativsätze haben eine Reihe von Eigenschaften, die sie aus zwingenden Sätzen unterscheiden. Insbesondere Erklärungen sind:

  • kommutativ (nachbestellbar)
  • assoziativ (kann umgruppiert werden)
  • idempotent (ohne Änderung wiederholt in ihrer Bedeutung)
  • monoton (Erklärungen subtrahieren keine Informationen)

Ein relevanter Punkt ist, dass diese alle strukturellen Eigenschaften und sind orthogonal Materie zu unterziehen. Deklarative geht es nicht um "Was vs. Wie" . Wir können erklären (vertreten und beschränkt) ein "wie" genauso einfach wie wir einen "was" erklären. deklarative ist über Struktur, nicht zufrieden. deklarative Programmierung hat einen wesentlichen Einfluss darauf, wie wir abstrakt und unseren Code Refactoring, und wie wir sie in Unterprogramme modularisieren, aber nicht so viel auf dem Domänenmodell.

Oft können wir zwingend notwendig, um deklarative zu konvertieren, indem Kontext hinzufügen. Z.B. von „links abbiegen. (... warten, bis es ...) rechts abbiegen.“ zu „Bob wird um 11:01 Uhr an der Kreuzung von Foo und Bar links abbiegen. Bob rechts an der Kreuzung der Bar und Baz um 11:06 verwandeln wird.“ Beachten Sie, dass im letzteren Fall die Sätze sind idempotent und kommutativ, während im ersteren Fall neu anordnen oder die Sätze zu wiederholen würde stark die Bedeutung des Programms ändern.

In Bezug auf monotone können Erklärungen hinzufügen Einschränkungen die subtrahieren Möglichkeiten . Aber Zwänge noch Informationen hinzufügen (genauer gesagt, Einschränkungen sind Informationen). Wenn wir zeitlich veränderlichen Erklärungen benötigen, ist es üblich, diese mit expliziter zeitlicher Semantik zu modellieren - z.B. aus „Der Ball ist flach“ bis „ist der Ball zu einem Zeitpunkt T flat“. Wenn wir zwei gegensätzliche Erklärungen haben, haben wir ein inkonsistentes deklaratives System, obwohl dies könnte durch die Einführung von weich Einschränkungen (Prioritäten, Wahrscheinlichkeiten, etc.) oder der Nutzung einer parakonsistenten Logik gelöst werden.

deklarative Programmierung ist „der Akt der Programmierung in Sprachen, die auf das mentale Modell des Entwicklers entsprechen eher als das Betriebsmodell der Maschine“.

Der Unterschied zwischen deklarative und imperative Programmierung ist gut dargestellt durch das Problem der strukturierten Daten-Parsing.

Ein Imperativ Programm würde für beide Seiten rekursiven Funktionen verwenden Eingabe zu konsumieren und erzeugen Daten. Ein deklaratives Programm würde eine Grammatik Ausdruck, der definiert, die Struktur der Daten, so dass sie dann analysiert werden können.

Der Unterschied zwischen diesen beiden Ansätzen ist, dass das deklarative Programm erstellt eine neue Sprache, die enger mit dem mentalen Modell des abgebildet wird Problem ist, als seine Host-Sprache.

Es mag seltsam klingen, aber ich würde Excel (oder eine Tabelle wirklich) auf die Liste der deklarativen Systeme hinzuzufügen. Ein gutes Beispiel für diese hier .

Ich würde erklären es als DP ist ein Weg, auszudrücken

  • A Ziel Ausdruck , die Bedingungen für - was wir suchen. Gibt es eine, vielleicht oder viele?
  • Einige bekannte Fakten
  • Regeln, dass die Know Fakten
  • erweitern

... und wo es ein deduct Motor in der Regel der Arbeit mit einer Vereinigung Algorithmus, um die Ziele zu finden.

Soweit ich sagen kann, es begann, wird verwendet, um zu beschreiben Systeme wie Prolog Programmierung weil Prolog ist (angeblich) über die Dinge auf eine abstrakte Weise erklärt.

Es bedeutet immer sehr wenig, da es die Definition von den Benutzern über gegeben hat. Es sollte klar sein, dass es eine Kluft zwischen der deklarativen Programmierung von Haskell, wie gegen die deklarative Programmierung von HTML ist.

Ein paar weitere Beispiele für deklarative Programmierung:

  • ASP.Net Markup für Datenbindung. Es sagt nur „dieses Raster füllen sich mit dieser Quelle“, zum Beispiel, und überlässt es dem System, wie das geschieht.
  • Linq Ausdrücke

deklarative Programmierung ist schön, weil es helfen kann, vereinfachen Ihr mentales Modell * Code und weil es schließlich besser skalierbar sein könnte.

Zum Beispiel, sagen wir, Sie haben eine Funktion, die in einem Array oder einer Liste etwas zu jedem Element der Fall ist. Traditioneller Code würde wie folgt aussehen:

foreach (object item in MyList)
{
   DoSomething(item);
}

es keine große Sache. Aber was, wenn Sie die mehr-deklarative Syntax verwenden und stattdessen DoSomething () als Aktion definieren? Dann kann man es so sagen:

MyList.ForEach(DoSometing);

Das ist, natürlich, prägnanter. Aber ich bin sicher, dass Sie mehr Sorgen als nur Spar zwei Zeilen Code hier und da. Leistung, zum Beispiel. Die alte Art und Weise, hatte die Verarbeitung in der Reihenfolge durchgeführt werden. Was passiert, wenn die .ForEach () Methode hatte einen Weg für Sie, um zu signalisieren, dass sie die Verarbeitung parallel verarbeiten kann, automatisch? Jetzt ganz plötzlich haben Sie Ihren Code mit mehreren Threads in einer sehr sicheren Weise hergestellt und verändert nur eine Zeile Code. Und in der Tat, es gibt eine eine Erweiterung für .Net, die Sie genau das tun können.

  • Wenn Sie diesen Link zu folgen, es Ihnen zu einem Blog-Post von einem Freund von mir nimmt. Der ganze Beitrag ist ein wenig lang, aber Sie können den Titel auf die Position nach unten scrollen „Das Problem“ _and es kein Problem abholen. *

Es hängt davon ab, wie Sie die Antwort auf den Text vor. Insgesamt kann man bei einem bestimmten Blick auf dem Programm aussehen, aber es hängt davon ab, was Winkel man das Problem zu suchen. Ich werde erhalten Sie mit dem Programm begonnen: Dim Bus, Auto, Zeit, Höhe Als Integr

Auch hier hängt es davon ab, was das Problem ist ein Gesamt. Man könnte es aufgrund des Programms zu verkürzen haben. Hoffe, das hilft und brauchen das Feedback, wenn es nicht der Fall ist. Dankeschön.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top