# Lập trình khai báo(declarative) và Lập trình mệnh lệnh(imperative) Lập trình khai báo(declarative) và Lập trình mệnh lệnh(imperative) là hai **phong cách lập trình** khác nhau — chúng phản ánh **cách bạn mô tả công việc mà máy tính cần thực hiện** ### **I. Lập trình khai báo(declarative)** - **Bạn nói cho máy tính biết *bạn muốn đạt được gì***. - Tập trung vào **cái gì** là kết quả cuối cùng. - Máy tính sẽ tự lo cách thực hiện. ``` # Declarative (giống kiểu functional programming) result = [x * 2 for x in data if x > 10] ``` Hoặc ví dụ quen thuộc hơn: ``` SELECT * FROM users WHERE age > 18; ``` Bạn không nói “lặp qua từng dòng, kiểm tra tuổi”, mà chỉ nói “hãy lấy dữ liệu theo điều kiện”. ### **II. Lập trình mệnh lệnh(imperative)** - **Bạn nói cho máy tính biết *từng bước phải làm gì***. - Tập trung vào **cách** để đạt được mục tiêu. - Ví dụ: viết một vòng lặp `for`, gọi hàm này rồi hàm kia, kiểm tra điều kiện… ``` # Imperative result = [] for x in data: if x > 10: result.append(x * 2) ``` Bạn phải quản lý từng bước cụ thể. ### **III. Trong LangGraph thì sao?** LangGraph **kết hợp cả hai phong cách**: - Bạn **khai báo các node và mối quan hệ giữa chúng** (kiểu **Lập trình khai báo(declarative)** – giống vẽ sơ đồ luồng). - Nhưng bên trong mỗi node, bạn viết **các bước cụ thể xử lý dữ liệu** (kiểu **Lập trình mệnh lệnh(imperative)** – như viết hàm bình thường). Ví dụ: ``` builder.add_node("process", process_input) # declarative def process_input(state): # imperative return {"output": state["input"].upper()} ``` ### Tóm lại: LangGraph giúp bạn tận dụng **sức mạnh kết hợp**: vừa dễ hình dung (declarative), vừa dễ điều khiển (imperative).
Phong cách | Bạn mô tả... | Ưu điểm | Nhược điểm |
---|---|---|---|
Imperative | CÁCH máy tính phải làm | Kiểm soát chi tiết | Dễ rối với quy trình phức tạp |
Declarative | CÁI GÌ bạn muốn đạt được | Gọn, dễ hiểu | Khó kiểm soát từng bước nhỏ |