Deklaratif vs. Imperatif
Sebuah paradigma pemrograman adalah gaya fundamental pemrograman komputer. Ada empat paradigma utama: imperatif, deklaratif, fungsional (yang dianggap sebagai bagian dari paradigma deklaratif) dan berorientasi objek.
Pemrograman deklaratif : adalah paradigma pemrograman yang mengekspresikan logika perhitungan (Apa yang dilakukan) tanpa menggambarkan aliran kontrolnya (Bagaimana). Beberapa contoh terkenal bahasa deklaratif domain spesifik (DSL) termasuk CSS, ekspresi reguler, dan subset dari SQL (SELECT queries, misalnya) Banyak bahasa markup seperti HTML, MXML, XAML, XSLT ... sering bersifat deklaratif. Pemrograman deklaratif mencoba mengaburkan perbedaan antara suatu program sebagai sekumpulan instruksi dan sebuah program sebagai penegasan tentang jawaban yang diinginkan.
Pemrograman imperatif : adalah paradigma pemrograman yang menjelaskan komputasi dalam hal pernyataan yang mengubah status program. Program deklaratif dapat dilihat sebagai perintah pemrograman atau pernyataan matematis.
Pemrograman fungsional: adalah paradigma pemrograman yang memperlakukan komputasi sebagai evaluasi fungsi matematika dan menghindari keadaan dan data yang bisa berubah. Ini menekankan penerapan fungsi, berbeda dengan gaya pemrograman imperatif, yang menekankan perubahan dalam keadaan. Dalam bahasa fungsional murni, seperti Haskell, semua fungsi tanpa efek samping, dan perubahan status hanya direpresentasikan sebagai fungsi yang mengubah keadaan.
Contoh pemrograman imperatif berikut dalam MSDN , loop melalui angka 1 hingga 10, dan menemukan angka genap.
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);
Kedua contoh menghasilkan hasil yang sama, dan yang satu tidak lebih baik atau lebih buruk daripada yang lain. Contoh pertama membutuhkan lebih banyak kode, tetapi kode itu dapat diuji, dan pendekatan imperatif memberi Anda kendali penuh atas detail implementasi. Dalam contoh kedua, kode ini bisa dibilang lebih mudah dibaca; namun, LINQ tidak memberi Anda kendali atas apa yang terjadi di balik layar. Anda harus percaya bahwa LINQ akan memberikan hasil yang diminta.