Thứ Tư, 30 tháng 12, 2009

// // Leave a Comment

EX1 - Tìm hiểu về lập trình hàm trong .NET

Tuần này phải nghiên cứu về lập trình hàm mới được,
Đi tìm tài liệu nào:
- Khà khà kiếm được 1 bài hay đây rồi...

Trong những năm gần đây, các ngôn ngữ lập trình của Microsoft không những
xuất hiện nhiều kỹ thuật mới mà còn có sự thay đổi nhanh chóng về cú pháp, câu lệnh...
Những sự thay đổi đó có nguồn gốc từ mô hình lập trình đã có từ lâu: lập trình “hàm số” hay Functional Programming.


Trong những năm gần đây, các ngôn ngữ lập trình của Microsoft không
những xuất hiện nhiều kỹ thuật mới mà còn có sự thay đổi nhanh chóng về
cú pháp, câu lệnh. Cách viết các đoạn mã chương trình ngắn gọn và dễ
quản lý hơn trước đây rất nhiều và đặc biệt, các dòng lệnh đôi khi mang
tính ước lượng giá trị của các biểu thức toán học hơn là đơn thuần thi
hành một tập các dòng lệnh. Những sự thay đổi đó có nguồn gốc từ mô
hình lập trình đã có từ lâu: lập trình “hàm số” hay Functional
Programming (FP).
ĐÔI NÉT VỀ LẬP TRÌNH FP

Mô hình FP xuất hiện sớm hơn so với lập trình mệnh lệnh (Imperative Programming) và lập trình hướng đối tượng (Object Oriented Programming). Tuy nhiên, các ngôn ngữ thông dụng như Java, C++ hay VB.Net, C# thích hợp cho lập trình OOP hơn là FP. Đối với các ngôn ngữ này, biến (variable) là phương tiện lưu dữ liệu và giá trị của biến bị truy xuất và thay đổi liên tục. Biến toàn cục (global) còn có thể được truy cập và thay đổi giá trị từ một class khác không định nghĩa nó. Chính điều này đôi khi gây ra những lỗi được gọi là “hiệu ứng lề” trong những ứng dụng có nhiều luồng (threads) xử lý đồng thời do sự chia sẻ biến giữa các luồng. Ngược lại, trong lập trình FP thuần túy, khái niệm biến không tồn tại mà chỉ có “identifier”. Các identifier khi đã được gán một giá trị thì không thể thay đổi được nữa. Đây là một điểm quan trọng trong lập trình FP: hạn chế những tác động từ bên ngoài làm thay đổi giá trị identifier hay giá trị trả về của hàm. Hàm chính là cơ sở trong lập trình FP, cho nên các đoạn mã chương trình có dạng hàm mang các biến số để ước lượng các giá trị biểu thức toán học.

Trong .Net, hàm ước lượng độ dài chuỗi string.Length() cho kết quả trả về hoàn toàn phụ thuộc vào trạng thái của chuỗi lúc đang gọi. Ngược lại, hàm trong lập trình FP phải luôn luôn trả về một giá trị duy nhất nếu các biến số của hàm là giống nhau. Hàm chỉ thay đổi giá trị trả về khi các biến số của hàm thay đổi.

Chính nhờ những ưu điểm như không chịu ảnh hưởng từ bên ngoài hay giá trị của hàm là duy nhất nên lập trình FP đã giải quyết được nhiều vấn đề phức tạp trong lập trình đa luồng mà trước đây người lập trình phải đối mặt như tranh chấp dữ liệu, đồng bộ dữ liệu hay tình trạng “deadlock” trong trường hợp các luồng phải xử lý tuần tự.

Hiện nay, phần mềm đứng trước yêu cầu phải tận dụng được sức mạnh của các bộ xử lý đa nhân và FP được xem là mô hình thích hợp cho yêu cầu này.

Bài sau chúng ta sẽ tìm các ví dụ nho nhỏ về lập trình hàm ..

0 comments: