Chào các thím,
Tôi đang viết chuỗi seri về JS thì đến đoạn Functinal Programming nên tôi tách riêng ra để ae tiện theo dõi.
________Chú ý: Topic chỉ đưa keywords lý thuyết, còn lại mỗi khi rảnh tôi sẽ đưa lên các ví dụ thực tế (Vốn được code bằng procedural/OOP) để convert nó ra FP ae cùng convert và trao đổi, cùng chia sẻ cùng code thực tế. Ae càng hứng thú code tôi cũng sẽ hứng code theo và update challenge liên tục________
Nhiều ae rất tò mò về Functinal Programming, quan điểm của tôi đã là Functinal Programming thì phải làm trên ngôn ngữ vốn nó sinh ra đã định nghĩa là theo mô hình Functinal Programming (Haskell, Erlang, Scheme...). JS hay Java hay Go bây giờ đều hỗ trợ FP nhưng bản thân vốn không phải là Functinal Programming nên mấy ngôn ngữ này nếu là lập trình FP thì sẽ thiếu đi khá nhiều ý nghĩa của FP.
Nhưng không sao, chúng ta dùng JS để biết thêm về FP cũng là cách để viết code theo cách mới. Còn lại thì mỗi một Programming paradigm được hình thành là để giải quyết vấn đề cụ thể của riêng nó. Chẳng có Programming paradigm nào giải quyết được tất cả các vấn đề. Thế nên, cá nhân tôi không theo một mô hình nào cả. Đi làm thì dự án theo mô hình nào thì làm theo mô hình ấy chứ cũng không được lựa chọn. Tôi đoán chắc các bạn cũng vậy thôi, theo FP hay OOP mà đi làm rồi, dự án nó dúi thẳng vào người mà nó là OOP thì bạn có theo FP cũng phải dẹp sang một bên và ngược lại. Vậy nên càng hiểu biết về càng mô hình càng tốt. Chính vì thế mà trong chương trình đạo tạo ngành CNTT các trường ĐH phần lớn có môn hoặc nhánh môn các mô hình lập trình. Nếu nó là đồ thừa thì nhà trường cũng chẳng dạy làm gì, đúng không?
Vậy với Functinal Programming bạn cần biết những kiến thức nào. Tôi sẽ liệt kê ra những từ khóa điển hình. Bạn tự tra google về khái niệm, cách sử dụng. Còn trong topic này chúng ta sẽ đi vào các ví dụ cụ thể chứ không lan can lý thuyết (mọi thứ trên mạng đã quá đầy đủ và chi tiết rồi).
1. Maths
Nói thẳng ra nếu theo FP mà không có nền tảng về toán học thì có học và làm cũng chẳng đi đến đâu ngoài việc làm được vài ví dụ con con, hiểu biết sơ sơ thôi vì FP là cách mà chúng ta sẽ lập trình mà tư duy là dùng toán để giải quyết. Khác với PP hay OOP các bạn sẽ chỉ dẫn HOW TO cho máy tính làm việc, còn FP là WHAT I/O (Cho vào cái gì, trả về cái gì) để giải quyết bài toán. Với FP không hẳn bạn phải biết tất thảy về toán mà chỉ cần tập trung vào:

OK chúng ta đã có các keywords về Maths, giờ là chi tiết các keywords của FP.
Về cơ bản, bạn sẽ cần biết về:
Nâng cao hơn sẽ là:
ok từng này là đủ bạn oanh tạc FP rồi nhé! Hãy đặt ra các bài code thử thách convert từ PP, OOP sang FP bằng JS. Bạn sẽ nhanh chóng tiếp cận sâu hơn về FP, đây cũng là concept của topic này. Mỗi khi rảnh rang mình sẽ đăng các thử thách code JS bằng FP lên để chúng ta cùng giải phẫu
Ok myfen
Tôi đang viết chuỗi seri về JS thì đến đoạn Functinal Programming nên tôi tách riêng ra để ae tiện theo dõi.
________Chú ý: Topic chỉ đưa keywords lý thuyết, còn lại mỗi khi rảnh tôi sẽ đưa lên các ví dụ thực tế (Vốn được code bằng procedural/OOP) để convert nó ra FP ae cùng convert và trao đổi, cùng chia sẻ cùng code thực tế. Ae càng hứng thú code tôi cũng sẽ hứng code theo và update challenge liên tục________
Nhiều ae rất tò mò về Functinal Programming, quan điểm của tôi đã là Functinal Programming thì phải làm trên ngôn ngữ vốn nó sinh ra đã định nghĩa là theo mô hình Functinal Programming (Haskell, Erlang, Scheme...). JS hay Java hay Go bây giờ đều hỗ trợ FP nhưng bản thân vốn không phải là Functinal Programming nên mấy ngôn ngữ này nếu là lập trình FP thì sẽ thiếu đi khá nhiều ý nghĩa của FP.
Nhưng không sao, chúng ta dùng JS để biết thêm về FP cũng là cách để viết code theo cách mới. Còn lại thì mỗi một Programming paradigm được hình thành là để giải quyết vấn đề cụ thể của riêng nó. Chẳng có Programming paradigm nào giải quyết được tất cả các vấn đề. Thế nên, cá nhân tôi không theo một mô hình nào cả. Đi làm thì dự án theo mô hình nào thì làm theo mô hình ấy chứ cũng không được lựa chọn. Tôi đoán chắc các bạn cũng vậy thôi, theo FP hay OOP mà đi làm rồi, dự án nó dúi thẳng vào người mà nó là OOP thì bạn có theo FP cũng phải dẹp sang một bên và ngược lại. Vậy nên càng hiểu biết về càng mô hình càng tốt. Chính vì thế mà trong chương trình đạo tạo ngành CNTT các trường ĐH phần lớn có môn hoặc nhánh môn các mô hình lập trình. Nếu nó là đồ thừa thì nhà trường cũng chẳng dạy làm gì, đúng không?
Vậy với Functinal Programming bạn cần biết những kiến thức nào. Tôi sẽ liệt kê ra những từ khóa điển hình. Bạn tự tra google về khái niệm, cách sử dụng. Còn trong topic này chúng ta sẽ đi vào các ví dụ cụ thể chứ không lan can lý thuyết (mọi thứ trên mạng đã quá đầy đủ và chi tiết rồi).
1. Maths
Nói thẳng ra nếu theo FP mà không có nền tảng về toán học thì có học và làm cũng chẳng đi đến đâu ngoài việc làm được vài ví dụ con con, hiểu biết sơ sơ thôi vì FP là cách mà chúng ta sẽ lập trình mà tư duy là dùng toán để giải quyết. Khác với PP hay OOP các bạn sẽ chỉ dẫn HOW TO cho máy tính làm việc, còn FP là WHAT I/O (Cho vào cái gì, trả về cái gì) để giải quyết bài toán. Với FP không hẳn bạn phải biết tất thảy về toán mà chỉ cần tập trung vào:
- Function theory (lý thuyết về hàm)
- Category theory (Lý thuyết phạm trù).
- Lambda calculus (phép tính Lambda).
- Mathematical induction (quy nạp).
- Logic.
- Cơ bản về lý thuyết đồ thị.
- Programming and Mathematical Thinking.

OK chúng ta đã có các keywords về Maths, giờ là chi tiết các keywords của FP.
Về cơ bản, bạn sẽ cần biết về:
- First-class functions and lambdas
- Function composition
- Higher-order functions
- Immutable data
- side effect
- Constructing and destructuring
- Functional dependencies
- Recursion
Nâng cao hơn sẽ là:
- Pattern matching
- Folds and unfolds
- Functor, monad
- persistent data structures
- Rank-N types
- Codata in action
- comonad
- Advanced monads (continuation, logic)
- Advanced functors (exponential, profunctors, contravariant)
- Higher-order abstract syntax
- High performance
- Kind polymorphism
- Generic programming
- Type-level programming
- Dependent-types, singleton types
- Graph reduction
ok từng này là đủ bạn oanh tạc FP rồi nhé! Hãy đặt ra các bài code thử thách convert từ PP, OOP sang FP bằng JS. Bạn sẽ nhanh chóng tiếp cận sâu hơn về FP, đây cũng là concept của topic này. Mỗi khi rảnh rang mình sẽ đăng các thử thách code JS bằng FP lên để chúng ta cùng giải phẫu

Ok myfen
Sửa lần cuối:
