Tuyên bố so với mệnh lệnh
Một mô hình lập trình là một phong cách cơ bản của lập trình máy tính. Có bốn mô hình chính: mệnh lệnh, khai báo, chức năng (được coi là một tập hợp con của mô hình khai báo) và hướng đối tượng.
Lập trình khai báo : là một mô hình lập trình biểu thị logic của tính toán (Làm gì) mà không mô tả dòng điều khiển của nó (Làm thế nào). Một số ví dụ nổi tiếng về ngôn ngữ cụ thể của miền khai báo (DSL) bao gồm CSS, biểu thức chính quy và tập hợp con của SQL (ví dụ: truy vấn SELECT) Nhiều ngôn ngữ đánh dấu như HTML, MXML, XAML, XSLT ... thường là khai báo. Lập trình khai báo cố gắng làm mờ sự khác biệt giữa một chương trình như một tập hợp các hướng dẫn và một chương trình như một sự khẳng định về câu trả lời mong muốn.
Lập trình mệnh lệnh : là một mô hình lập trình mô tả tính toán theo các câu lệnh thay đổi trạng thái chương trình. Các chương trình khai báo có thể được xem như là các lệnh lập trình hoặc các xác nhận toán học.
Lập trình hàm: là một mô hình lập trình xử lý tính toán như là sự đánh giá các hàm toán học và tránh dữ liệu trạng thái và đột biến. Nó nhấn mạnh việc áp dụng các chức năng, trái ngược với phong cách lập trình mệnh lệnh, trong đó nhấn mạnh đến những thay đổi về trạng thái. Trong một ngôn ngữ chức năng thuần túy, chẳng hạn như Haskell, tất cả các chức năng đều không có tác dụng phụ và các thay đổi trạng thái chỉ được biểu diễn dưới dạng các hàm biến đổi trạng thái.
Ví dụ sau đây về lập trình mệnh lệnh trong MSDN , lặp qua các số từ 1 đến 10 và tìm các số chẵn.
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);
Cả hai ví dụ đều cho kết quả như nhau, và một cái không tốt hơn hay kém hơn cái kia. Ví dụ đầu tiên yêu cầu nhiều mã hơn, nhưng mã có thể kiểm tra được và cách tiếp cận bắt buộc cung cấp cho bạn toàn quyền kiểm soát các chi tiết triển khai. Trong ví dụ thứ hai, mã được cho là dễ đọc hơn; tuy nhiên, LINQ không cung cấp cho bạn quyền kiểm soát những gì xảy ra đằng sau hậu trường. Bạn phải tin tưởng rằng LINQ sẽ cung cấp kết quả được yêu cầu.