Déclaratif vs impératif
Un paradigme de programmation est un style fondamental de programmation informatique. Il existe quatre paradigmes principaux: impératif, déclaratif, fonctionnel (qui est considéré comme un sous-ensemble du paradigme déclaratif) et orienté objet.
Programmation déclarative : est un paradigme de programmation qui exprime la logique d'un calcul (What do) sans décrire son flux de contrôle (How do). Certains exemples bien connus de langages déclaratifs spécifiques au domaine (DSL) incluent le CSS, les expressions régulières et un sous-ensemble de SQL (requêtes SELECT, par exemple). De nombreux langages de balisage tels que HTML, MXML, XAML, XSLT ... sont souvent déclaratifs. La programmation déclarative essaie de brouiller la distinction entre un programme comme un ensemble d'instructions et un programme comme une assertion sur la réponse souhaitée.
Programmation impérative : est un paradigme de programmation qui décrit le calcul en termes d'instructions qui changent l'état d'un programme. Les programmes déclaratifs peuvent être considérés comme des commandes de programmation ou des assertions mathématiques.
Programmation fonctionnelle: est un paradigme de programmation qui traite le calcul comme l'évaluation des fonctions mathématiques et évite les données d'état et mutables. Il met l'accent sur l'application des fonctions, contrairement au style de programmation impératif, qui met l'accent sur les changements d'état. Dans un langage fonctionnel pur, comme Haskell, toutes les fonctions sont sans effets secondaires et les changements d'état ne sont représentés que comme des fonctions qui transforment l'état.
L'exemple suivant de programmation impérative dans MSDN , parcourt les numéros 1 à 10 et trouve les numéros pairs.
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);
Les deux exemples donnent le même résultat, et l'un n'est ni meilleur ni pire que l'autre. Le premier exemple nécessite plus de code, mais le code est testable, et l'approche impérative vous donne un contrôle total sur les détails de l'implémentation. Dans le deuxième exemple, le code est sans doute plus lisible; cependant, LINQ ne vous donne pas le contrôle de ce qui se passe dans les coulisses. Vous devez avoir confiance que LINQ fournira le résultat demandé.