Deklaratywny kontra imperatywny
Programowania paradygmat jest podstawową styl programowania. Istnieją cztery główne paradygmaty: imperatywny, deklaratywny, funkcjonalny (który jest uważany za podzbiór deklaratywnego paradygmatu) i obiektowy.
Programowanie deklaratywne : to paradygmat programowania, który wyraża logikę obliczeń (Co zrobić) bez opisywania przepływu sterowania (Jak to zrobić). Niektóre dobrze znane przykłady deklaratywnych języków specyficznych dla domeny (DSL) obejmują CSS, wyrażenia regularne i podzbiór SQL (na przykład zapytania SELECT) Wiele języków znaczników, takich jak HTML, MXML, XAML, XSLT ... jest często deklaratywnych. Programowanie deklaratywne próbuje zatrzeć rozróżnienie między programem jako zestawem instrukcji a programem jako stwierdzeniem o pożądanej odpowiedzi.
Programowanie imperatywne : to paradygmat programowania opisujący obliczenia w kategoriach instrukcji zmieniających stan programu. Programy deklaratywne mogą być podwójnie postrzegane jako polecenia programowania lub twierdzenia matematyczne.
Programowanie funkcjonalne: jest paradygmatem programowania, który traktuje obliczenia jako ocenę funkcji matematycznych i unika stanu i zmiennych danych. Podkreśla zastosowanie funkcji, w przeciwieństwie do imperatywnego stylu programowania, który podkreśla zmiany stanu. W czysto funkcjonalnym języku, takim jak Haskell, wszystkie funkcje nie wywołują skutków ubocznych, a zmiany stanu są reprezentowane tylko jako funkcje przekształcające stan.
Poniższy przykład programowania imperatywnego w MSDN zapętla liczby od 1 do 10 i znajduje liczby parzyste.
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);
Oba przykłady dają ten sam wynik, a jeden nie jest ani lepszy, ani gorszy od drugiego. Pierwszy przykład wymaga więcej kodu, ale kod można przetestować, a podejście imperatywne daje pełną kontrolę nad szczegółami implementacji. W drugim przykładzie kod jest prawdopodobnie bardziej czytelny; LINQ nie daje jednak kontroli nad tym, co dzieje się za kulisami. Musisz ufać, że LINQ zapewni żądany wynik.