Declarative vs. Imperative
กระบวนทัศน์การเขียนโปรแกรมเป็นรูปแบบพื้นฐานของการเขียนโปรแกรมคอมพิวเตอร์ มีกรอบความคิดหลักอยู่สี่ประการ: ความจำเป็น, การประกาศ, การทำงาน (ซึ่งถือเป็นส่วนหนึ่งของกระบวนทัศน์การประกาศ) และการเชิงวัตถุ
Declarative Programming : เป็นกระบวนทัศน์การเขียนโปรแกรมที่แสดงออกถึงตรรกะของการคำนวณ (What do) โดยไม่อธิบายถึงโฟลว์การควบคุม (How do) ตัวอย่างที่รู้จักกันดีของภาษาเฉพาะโดเมนที่ประกาศ (DSL) รวมถึง CSS, นิพจน์ทั่วไปและชุดย่อยของ SQL (ตัวอย่างคิวรี SELECT) ภาษามาร์กอัปหลายภาษาเช่น HTML, MXML, XAML, XSLT ... มักจะเป็นการประกาศ การเขียนโปรแกรมเชิงประกาศพยายามทำให้ความแตกต่างระหว่างโปรแกรมเป็นชุดของคำสั่งและโปรแกรมเป็นการยืนยันเกี่ยวกับคำตอบที่ต้องการ
การเขียนโปรแกรมที่จำเป็น : เป็นกระบวนทัศน์การเขียนโปรแกรมที่อธิบายการคำนวณในแง่ของงบที่เปลี่ยนสถานะของโปรแกรม โปรแกรมที่สามารถประกาศได้สามารถดูได้เป็นคำสั่งการเขียนโปรแกรมหรือยืนยันทางคณิตศาสตร์
ฟังก์ชั่นการเขียนโปรแกรม: เป็นกระบวนทัศน์การเขียนโปรแกรมที่ปฏิบัติต่อการคำนวณเป็นการประเมินฟังก์ชั่นทางคณิตศาสตร์และหลีกเลี่ยงข้อมูลรัฐและไม่แน่นอน มันเน้นการประยุกต์ใช้ฟังก์ชั่นในทางตรงกันข้ามกับรูปแบบการเขียนโปรแกรมจำเป็นซึ่งเน้นการเปลี่ยนแปลงในรัฐ ในภาษาที่ใช้งานได้จริงเช่น Haskell ฟังก์ชั่นทั้งหมดไม่มีผลข้างเคียงและการเปลี่ยนแปลงสถานะจะถูกแสดงเป็นหน้าที่ที่เปลี่ยนสถานะเท่านั้น
ตัวอย่างการเขียนโปรแกรมที่จำเป็นในMSDNต่อไปนี้วนผ่านตัวเลข 1 ถึง 10 และค้นหาตัวเลขคู่
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);
ตัวอย่างทั้งสองให้ผลลัพธ์เดียวกันและอย่างใดอย่างหนึ่งไม่ดีกว่าหรือแย่กว่าอีก ตัวอย่างแรกต้องการรหัสเพิ่มเติม แต่รหัสสามารถทดสอบได้และวิธีการที่จำเป็นช่วยให้คุณสามารถควบคุมรายละเอียดการใช้งานได้อย่างสมบูรณ์ ในตัวอย่างที่สองรหัสสามารถอ่านได้ง่ายขึ้น อย่างไรก็ตาม LINQ ไม่ได้ให้คุณควบคุมสิ่งที่เกิดขึ้นเบื้องหลัง คุณต้องเชื่อมั่นว่า LINQ จะให้ผลลัพธ์ตามที่ร้องขอ