Deklarativ vs. Imperativ
Ein Programmierparadigma ist ein grundlegender Stil der Computerprogrammierung. Es gibt vier Hauptparadigmen: imperativ, deklarativ, funktional (was als Teilmenge des deklarativen Paradigmas betrachtet wird) und objektorientiert.
Deklarative Programmierung : ist ein Programmierparadigma, das die Logik einer Berechnung ausdrückt (Was tun), ohne ihren Kontrollfluss zu beschreiben (Wie tun). Einige bekannte Beispiele für deklarative domänenspezifische Sprachen (DSLs) sind CSS, reguläre Ausdrücke und eine Teilmenge von SQL (z. B. SELECT-Abfragen). Viele Auszeichnungssprachen wie HTML, MXML, XAML, XSLT ... sind häufig deklarativ. Die deklarative Programmierung versucht, die Unterscheidung zwischen einem Programm als Befehlssatz und einem Programm als Aussage über die gewünschte Antwort zu verwischen.
Imperative Programmierung : ist ein Programmierparadigma, das die Berechnung anhand von Anweisungen beschreibt, die einen Programmstatus ändern. Die deklarativen Programme können doppelt als Programmierbefehle oder mathematische Aussagen angesehen werden.
Funktionale Programmierung: ist ein Programmierparadigma, das die Berechnung als Bewertung mathematischer Funktionen behandelt und Zustands- und veränderbare Daten vermeidet. Es betont die Anwendung von Funktionen im Gegensatz zum imperativen Programmierstil, der Zustandsänderungen betont. In einer reinen Funktionssprache wie Haskell sind alle Funktionen ohne Nebenwirkungen, und Zustandsänderungen werden nur als Funktionen dargestellt, die den Zustand transformieren.
Das folgende Beispiel für die imperative Programmierung in MSDN durchläuft die Zahlen 1 bis 10 und findet die geraden Zahlen.
var numbersOneThroughTen = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
//With imperative programming, we'd step through this, and decide what we want:
var evenNumbers = new List<int>();
foreach (var number in numbersOneThroughTen)
{ if (number % 2 == 0)
{
evenNumbers.Add(number);
}
}
//The following code uses declarative programming to accomplish the same thing.
// Here, we're saying "Give us everything where it's odd"
var evenNumbers = numbersOneThroughTen.Select(number => number % 2 == 0);
Beide Beispiele liefern das gleiche Ergebnis, und eines ist weder besser noch schlechter als das andere. Das erste Beispiel erfordert mehr Code, aber der Code ist testbar, und der zwingende Ansatz gibt Ihnen die volle Kontrolle über die Implementierungsdetails. Im zweiten Beispiel ist der Code wahrscheinlich besser lesbar. Mit LINQ haben Sie jedoch keine Kontrolle darüber, was hinter den Kulissen passiert. Sie müssen darauf vertrauen, dass LINQ das angeforderte Ergebnis liefert.