Dichiarativo vs. Imperativo
Un paradigma di programmazione è uno stile fondamentale della programmazione informatica. Esistono quattro paradigmi principali: imperativo, dichiarativo, funzionale (che è considerato un sottoinsieme del paradigma dichiarativo) e orientato agli oggetti.
Programmazione dichiarativa : è un paradigma di programmazione che esprime la logica di un calcolo (cosa fare) senza descriverne il flusso di controllo (come fare). Alcuni esempi ben noti di linguaggi dichiarativi specifici di dominio (DSL) includono CSS, espressioni regolari e un sottoinsieme di SQL (query SELECT, ad esempio) Molti linguaggi di markup come HTML, MXML, XAML, XSLT ... sono spesso dichiarativi. La programmazione dichiarativa tenta di confondere la distinzione tra un programma come un insieme di istruzioni e un programma come un'affermazione sulla risposta desiderata.
Programmazione imperativa : è un paradigma di programmazione che descrive il calcolo in termini di istruzioni che cambiano lo stato di un programma. I programmi dichiarativi possono essere visti due volte come comandi di programmazione o asserzioni matematiche.
Programmazione funzionale: è un paradigma di programmazione che considera il calcolo come la valutazione di funzioni matematiche ed evita dati di stato e mutabili. Sottolinea l'applicazione di funzioni, in contrasto con lo stile di programmazione imperativo, che enfatizza i cambiamenti di stato. In un linguaggio funzionale puro, come Haskell, tutte le funzioni sono prive di effetti collaterali e i cambiamenti di stato sono rappresentati solo come funzioni che trasformano lo stato.
Il seguente esempio di programmazione imperativa in MSDN , scorre i numeri da 1 a 10 e trova i numeri pari.
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);
Entrambi gli esempi producono lo stesso risultato e uno non è né migliore né peggiore dell'altro. Il primo esempio richiede più codice, ma il codice è verificabile e l'approccio imperativo ti dà il pieno controllo sui dettagli di implementazione. Nel secondo esempio, il codice è probabilmente più leggibile; tuttavia, LINQ non ti dà il controllo su ciò che accade dietro le quinte. Devi fidarti che LINQ fornirà il risultato richiesto.