Vì sao Functional Programming lại quan trọng?

Posted: 08/05/2011 in F#
Tags: ,

Khi người ta nói đến FP, họ thường xem đặc tính không có trạng thái của nó như là một thiếu sót trầm trọng, mà quên đi những ưu điểm của nó. Một lập trình viên có kinh nghiệm làm việc với nhiều paradigm khác nhau có thể chỉ ngay ra rằng: imperative dành 90% số lượng code cho phép gán, trong khi FP thì không có phép gán nào, và số lượng code phải viết trong FP ngắn hơn 90% so với imperative. Tuy nhiên, không có nhiều người bị thuyết phục để lao vào sống trong thế giới “khổ hạnh” của lập trình đệ qui và không trạng thái, như John Hughes đã chỉ ra trong bài báo mang tên “Why Functional Programming Matters”:

“The functional programmer sounds rather like a medieval monk, denying himself the pleasures of life in the hope that it will make him virtuous.”

John Hughes, Chalmers University of Technology
(http://www.cs.chalmers.se/~rjmh/Papers/whyfp.html)

Để thấy được ưu điểm của FP, bạn cần phải chú ý đến những gì mà nó cho phép hơn là những gì mà nó ngăn cản. Ví dụ:

  • Xem một hàm như là một giá trị và có thể chuyển hàm này thành đối số cho các hàm khác. Khả năng tưởng như nhỏ bé này ảnh hưởng vô cùng lớn lao đến tư duy khi lập trình: sự phân biệt giữa dữ liệu và hàm được hạn chế, nên bạn có thể giải quyết nhiều vấn đề một cách tự nhiên hơn, mà không cần tốn công suy nghĩ các biện pháp kĩ thuật. Chương trình functional nhỏ gọn và mang tính module hơn hơn chương trình imperative và OO cùng chức năng.
  • Giới thiệu nhiều tính năng vay mượn trong toán học và không thường thấy trong imperative. Điển hình là lập trình viên functional thường sử dụng curried functions – loại hàm mà tất cả đối số được truyền vào một lần duy nhất, nếu có một hoặc nhiều đối số chưa có giá trị, hàm sẽ dừng lại và chờ đợi các giá trị thiếu sót này.
  • Hệ thống kiểu mang lại hiệu quả lớn về mặt tốc độ và độ chính xác vì có tỷ lệ (phạm vi) / (dung lượng) cao. Hàm có thể trả về nhiều giá trị cùng lúc, tiện lợi hơn trong việc lập trình.

nguồn : http://www.vcprojects.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s