Haskell – Giới thiệu

[Đọc bài này mất trung bình 3 phút]

Haskell là một ngôn ngữ lập trình chức năng (functional programming) và lười (lazy):))) (chúng ta sẽ tìm hiểu sau) được tạo ra vào năm 1980 bởi một hội đồng các nhà học thuật. Vào thời đó cũng có một số ngôn ngữ lập trình chức năng, tuy nhiên mỗi người một ý không ai giống ai. Vì thế cuối cùng họ tập hợp lại và cùng xây dựng nên một ngôn ngữ lập trình mới với những tính năng tốt nhất của loại lập trình chức năng, và Haskell đã ra đơi từ đó.

Mô hình lập trình chức năng

Tên tiếng Anh là Functional Programming, chúng ta cũng có thể gọi là lập trình hàm, hoặc bạn cũng có thể gọi nó theo cách của bạn.

Không có ai đưa ra định nghĩa chính thức cho thuật ngữ Lập trình chức năng. Tuy nhiên khi nói Haskell là một ngôn ngữ lập trình chức năng, thì chúng ta thường nghĩ đến 2 thứ sau:

  • HÀM LÀ TRÊN HẾT, nghĩa là các hàm cũng có giá trị như các loại biến khác.
  • Lập trình trong Haskell thường xoay quanh việc đánh giá các câu lệnh biểu thức hơn là thực thi các biểu thức đó.

Tham chiếu minh bạch

Tính chất này có thể được giải thích:

  • Tất cả mọi thứ từ biến đến cấu trúc dữ liệu đều không thể thay đổi. Nếu bạn để ý thì lớp String trong Java cũng có đặc tính này.
  • Các biểu thức không có tác dụng phụ, chẳng hạn như thay đổi giá trị của các biến toàn cục hoặc hiển thị output ra màn hình.
  • Một hàm được gọi nhiều lần như nhau và được truyền tham số như nhau thì luôn cho ra kết quả giống nhau.

Nghe qua thì có thể khó hiểu. Luật Leibniz giải thích tính chất này như sau: phép toán bằng gán '=' có thể thay thế tất cả mọi thứ ở bất cứ đâu. Ví dụ, nếu x được định nghĩa bởi phương trình x=42, thì cái tên x và số 42 có thể được dùng ở bất cứ đâu mà vì chúng “tuy 2 mà 1”.

Tính lười – Lazy

Lười ở đây nghĩa là, nếu kết quả của một biểu thức không được dùng ở bất cứ đâu, thì Haskell sẽ không thực thi biểu thức đó. Cũng vì thế mà nó có một số hệ quả (hoặc hậu quả) sau:

  • Việc định nghĩa một cấu trúc điều khiển là vô cùng dễ dàng.
  • Định nghĩa vô số các cấu trúc dữ liệu là một điều khả thi.
  • Việc đánh giá độ phức tạp bộ nhớ và thời gian là vô cùng… phức tạp 🙂

Kiểu dữ liệu tĩnh

Tất cả các biểu thức trong Haskell đều có kiểu, và Haskell KHÔNG kiểm tra kiểu trong quá trình biên dịch. Các đoạn code có lỗi liên quan đến kiểu còn không được Haskell biên dịch, do đó khiến việc chạy chương trình nhanh hơn.

Hàm thứ bậc cao

Hàm thức bậc cao (Higher-Order Function) cũng là một tính chất có trong ngôn ngữ Javascript, cho phép một hàm có thể được dùng làm tham số truyền vào một hàm khác, và cũng có thể được dùng làm giá trị trả về của một hàm nào đó.

1 bình luận về “Haskell – Giới thiệu

  1. Pingback: Haskell – Lập trình chức năng với Haskell | Phở Code

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *

Website này sử dụng Akismet để hạn chế spam. Tìm hiểu bình luận của bạn được duyệt như thế nào.