Deklarative Programmierung beschreibt, was ein Programm erreichen soll, nicht wie es das tut. Die zugrunde liegende Software oder der Compiler entscheidet selbst über den besten Ausführungsweg. Das Gegenteil ist die imperative Programmierung, die jeden Schritt einzeln vorgibt.
Was statt Wie
Ein imperativer Algorithmus sagt dem Rechner: „Erzeuge eine Liste, durchlaufe sie, vergleiche und füge ein". Ein deklarativer Ansatz sagt nur: „Sortiere diese Liste". Wie das Sortieren intern abläuft, bleibt der Laufzeitumgebung überlassen. Dadurch wird der Code kürzer, lesbarer und weniger fehleranfällig — man verliert aber die feine Kontrolle über die Ausführungsdetails.
Typische Beispiele
- SQL:
SELECT name FROM kunden WHERE stadt = 'Lübeck'beschreibt das Wunsch-Ergebnis; der Datenbankoptimierer wählt die Abfrage-Strategie — siehe SQL-Befehle. - Logische Programmierung: Prolog formuliert Fakten und Regeln, aus denen ein Beweiser Schlüsse zieht.
- Beschreibungssprachen: HTML und CSS beschreiben Struktur und Aussehen, ohne die Rendering-Schritte anzugeben.
- Infrastruktur: Tools wie Terraform beschreiben den gewünschten Zielzustand der Infrastruktur; das Tool bringt die Umgebung dorthin.
Unterarten
Die Funktionale Programmierung ist ein wichtiger deklarativer Stil: Ausdrücke beschreiben Ergebnisse, nicht Schritte. Hinzu kommen logische Programmierung und Constraint-Programmierung, die Bedingungen formulieren, die eine Lösung erfüllen muss. Das mathematische Fundament vieler deklarativer Ausdrücke ist der Lambda-Kalkül.
Vor- und Nachteile
- Vorteile: kompakter Code, weniger Fehlerquellen, leichter zu warten, oft parallelisierbar.
- Nachteile: weniger Kontrolle über Laufzeit und Ressourcen; Performance-Feinabstimmung ist schwieriger.
Verwandte Grundlagen: Kompilieren und Objektorientierung.