Lập trình khai báo

Trong khoa học máy tính, lập trình khai báo (tiếng Anh: declarative programming) là một mẫu hình lập trình theo phong cách xây dựng cấu trúc và các yếu tố của chương trình máy tính để thể hiện tính logic của sự tính toán mà không mô tả luồng điều khiển của nó. Hầu hết các ngôn ngữ áp dụng kiểu này cố gắng giảm thiểu hoặc loại bỏ hiệu ứng lề bằng cách mô tả những gì chương trình phải hoàn thành về mặt miền vấn đề (problem domain), thay vì mô tả cách hoàn thành nó như thế nào như một chuỗi các thành phần cơ bản của ngôn ngữ lập trình (còn như thế nào thì tùy thuộc vào hiện thực của ngôn ngữ). Điều này ngược với lập trình mệnh lệnh vốn hiện thực các giải thuật theo từng bước rõ ràng. Lập trình khai báo thường xem chương trình như là lý thuyết của một logic hình thức, và tính toán như là suy luận trong không gian logic đó. Lập trình khai báo có thể giúp đơn giản hóa rất nhiều cho việc viết chương trình song song. Ngôn ngữ khai báo phổ biến bao gồm các ngôn ngữ truy vấn cơ sở dữ liệu (như SQL, XQuery), biểu thức chính quy, lập trình logic, lập trình hàm, và hệ thống quản lý cấu hình. Lập trình khai báo thường được định nghĩa như kiểu lập trình không phải mệnh lệnh. Lập trình khai báo là một thuật ngữ chung (umbrella term) bao gồm một số mẫu hình lập trình nổi tiếng hơn. Lập trình ràng buộc mô tả mối quan hệ giữa các biến dưới dạng các ràng buộc để chỉ ra thuộc tính của giải pháp đích. The set of constraints is solved by giving a value to each variable so that the solution is consistent with the maximum number of constraints. Constraint programming often complements other paradigms: functional, logical, or even imperative programming. Các ví dụ nổi tiếng về Ngôn ngữ miền chuyên biệt (domain-specific language, hay DSL) bao gồm yacc, QML, Make, Puppet, biểu thức chính quy, và một tập con của SQL (như câu lệnh truy vấn SELECT). Ngôn ngữ lập trình logic như Prolog mô tả và truy vấn các quan hệ. Danh sách các ngôn ngữ lập trình khai báo So sánh các mẫu hình lập trình Lập trình quy nạp (Inductive programming) ^ Lloyd, J.W., Practical Advantages of Declarative Programming ^ Declarative language in The Free On-line Dictionary of Computing, Editor Denis Howe. ^ “DAMP 2009: Workshop on Declarative Aspects of Multicore Programming”. Cse.unsw.edu.au. ngày 20 tháng 1 năm 2009. Truy cập ngày 15 tháng 8 năm 2013. Frans Coenen. Characteristics of declarative programming languages. 1999. Robert Harper. What, If Anything, Is A Declarative Language?. 2013. There Is Such A Thing As A Declarative Language, and It’s The World’s Best DSL. 2013. Olof Torgersson. A Note on Declarative Programming Paradigms and the Future of Definitional Programming. 1996.