Functional programming là gì

 - 
Phần 1: Con con đường sáng

Lúc này, Tin giới Tây pmùi hương mở ra 2 lão quái quỷ Ngulặng Anh hậu kỳ đỉnh phong, bí quyết Hóa Thần chỉ nửa bước cảm ngộ ý chình họa. Một tín đồ là Đồ Linh tôn mang - tức Alan Turing, tăm tiếng với pháp môn Turing Machine. Người tê là Khâu Kỳ thượng tiên, Alonzo Church, vẫy vùng tam giới bởi đạo thuật Lambdomain authority Calculus (1).

Bạn đang xem: Functional programming là gì

Turing Machine của Alan Turing với Lambda Calculus của Alonzo Church thực ra là nhị phương pháp tiếp cận nguyên tắc giải pháp xử lý tính tân oán vào computer, thường xuyên được giới chuyên môn hotline phổ biến là Luận đề Church - Turing (The Church-Turing Thesis).

Turing Machine đặt cơ sở bên trên bài toán sở hữu state machine với tinh thần tiến trình, còn ý tưởng phát minh Lambda Calculus được thiết kế bên trên các đặc điểm của hàm tân oán học. Lấy tu vi của bổn định tiên hiện thời thì không lĩnh hội được mấy vật dụng cừ khôi những điều đó, đề nghị không đủ can đảm lạm bàn ở đây. Chỉ biết rằng, 2 thuật pháp nói trên là khởi xướng của 2 trường phái tu luyện mạnh nhất trong tin giới hiện nay: Object Oriented Programming cùng Functional Programming.

Có không hề ít chế độ thiết kế - Programming Paradigm. OOPhường với Functional Programming chỉ cần 2 trong số kia. Trong cuốn nắn "Programming Paradigms for Dummies: What Every Programmer Should Know", tác giả Peter Van Roy chỉ dẫn quy mô tổng đúng theo quan hệ tình dục giữa những cách thức lập trình như vậy này:

*

Trong lịch sử dân tộc công nghệ, có vẻ như OOP chiếm phần ưu cố gắng rộng đối với Functional Programming. Bạn cđọng demo quan sát bao quanh bản thân là biết, từ bỏ thời tập tành code sẽ thấy thiên địa tràn trề luật lệ OOPhường rồi. Các job mô tả tìm kiếm, các buổi interview phần đa nhắc đến OOPhường như pháp thuật căn uống phiên bản. Thảo luận nghệ thuật hầu như luân phiên quanh mấy định nghĩa Class, Object, Inheritance, rồi cao hơn vậy thì SOLID, Polymorphism, Encapsulation...

Nhưng, trên quả đât, trường đoản cú thời Lisp cho FP, rồi Haskell, Elixir, chưa khi nào thiếu vắng hầu như tu tin mang đi theo con phố Functional Programming. Nhất là khoảng tầm sau 2010, ko rõ vì sao fan ta bước đầu phàn nàn nhiều hơn về OOPhường, trích dẫn nhiều hơn nữa vấn đề banana/gorilla của Joe Armsvào (2), Từ đó, chủ thể "Functional Programming" bước đầu rét dần dần quay trở về.

Tôi nghe biết Functional Programming vào lúc năm ngoái sang một talk show trên YouTube của "chú Bob", nhưng mà không hiểu nhiều lắm bắt buộc cũng không để ý.

Phải thanh lịch năm 2016, tôi new xác nhận tò mò sâu về Functional Programming sau khoản thời gian hiểu 2 loạt bài viết "Composing Software" của Eric Elliott và "So You Want lớn be a Functional Programmer" của Charles Scalfani trên Medium.

Eric Elliott lần lượt giải thích từng concepts của Functional Programming một phương pháp tỉ mỉ, dễ dàng nắm bắt. Còn Charles Scalfani chính xác là fan cuồng Functional Programming. Anh trình bày nó bên dưới dạng một khối hệ thống triết lý, quả đât quan liêu rực rỡ. Thậm chí, Scalfani còn đề cao Functional Programming nlỗi nấc thang tiến hóa vào lịch sử vẻ vang xây dựng. Lối viết của anh gây ấn tượng rất dạn dĩ.

*

Trước kia, Scalfani còn tồn tại bài "Goodbye, Object Oriented Programming" tạo bàn cãi sôi nổi.

Nhưng độc giả đề xuất để ý, Functional Programming không bài xích OOP.. Chúng chỉ cần rất nhiều con phố tu luyện không giống nhau, thuộc hướng về Đại Đạo. Trong Lúc viết code, ta hoàn toàn hoàn toàn có thể phối kết hợp các hình thức lập trình sẵn khác nhau, miễn sao đạt đến hiệu quả Đúng - Nkhô hanh - Ổn - Đẹp.

ReactJS là một trong những ví dụ vượt trội, rất có thể coi nó nhỏng 7 phần Functional Programming + 3 phần OOP. Về đặc điểm này, Anjana Vakil tất cả một bài bác biểu đạt rất hấp dẫn ở GOTO 2017.


Dù sao, tự đó đến nay, định hướng bốn duy Functional Programming vẫn từng bước một lan rộng ra, ảnh hưởng mang lại kiến tạo của khá nhiều chương trình văn minh. Chỉ phải lưu ý một chút, chúng ta cũng có thể nhận thấy các công dụng khá nổi bật của Functional Programming xuất hiện thêm vào phần nhiều frameworks với những bạn dạng cập nhật ngôn ngữ bắt đầu. Thậm chí, ví như xét kỹ, những có mang thoạt quan sát có vẻ ko tương quan như WebComponent, Serverless, Microservice... cũng ẩn hiện tại bốn tưởng Functional Programming. Và tôi gần như là không còn chạm tới class, new, this nữa.

*

What"s Functional Programming?

Vậy chung cục Functional Programming là dòng gì? Nếu google bạn sẽ search thấy hàng tá phương pháp lý giải khác biệt. Còn tôi chủ chương đề nghị có mang ngắn thêm gọn ráng này:

Functional Programming là phương thức lập trình rước function làm đơn vị chức năng thao tác làm việc cơ phiên bản.

Đúng vậy. Functional Programming xét về lý tưởng phát minh thì chỉ bao gồm function, function cùng function. Không lệnh gán (assignment statements), không đề nghị tới những biến chuyển (variables), không bảo quản trạng thái toàn cục (global state). Trong Functional Programming, họ điều khiển và tinh chỉnh mẫu chảy công tác bằng phương pháp kết hợp các functions lại cùng nhau. Chúng ta tung hứng những functions tương hỗ, dấn vào function, nhả ra function, lồng ghxay, xâu chuỗi, biến hóa chúng theo phần đa cách rất có thể nghĩ ra.

Đó Gọi là không gian "first-class functions", chỗ lập trình sẵn viên đối xử cùng với functions nlỗi "first-class citizens". Ở đâu functions được nhìn nhận trọng như vậy, làm việc đó ta rất có thể lập trình sẵn theo vẻ ngoài Functional Programming. JavaScript, Pynhỏ nhắn, Golang, trong cả PHP đó là như thế. Java tính từ v8.0 trình làng năm 2017 cũng là điều này. Dù không hoàn hảo như Haskell, F#, etc - hầu hết tu chân giới vốn được sinh ra mang lại Functional Programming - mà lại ta vẫn có thể tu luyện Functional Programming được...

Chỉ bao gồm điều buộc phải áp dụng khác một chút ít, linh hoạt rộng một ít. Đó là nguyên nhân vì sao trong các công tác JavaScript, Pynhỏ, mặc dù viết theo phong cách Functional Programming nhưng vẫn buộc phải sử dụng cho những trở nên, lệnh gán để làm việc.

Các tu tin giả tầng tốt ý muốn bắt đầu tuyến phố Functional Programming rất cần phải thâu tóm những tư tưởng cơ bạn dạng nhỏng Immutability, Purity, Higher-order functions, Currying function, Function Composition... Sau Lúc thăng cấp chình họa giới cao hơn nữa thì hoàn toàn có thể khám phá Monad, Functor, Setoid, Idempotent, Lens... và nhiều nữa.

Nào, hiện giờ hãy bước đầu hành trình dài...

Immutability

Immutability tức là tính không thay đổi.

Nguyên ổn tắc thứ nhất vào Functional Programming là: cái làm sao sẽ knhị báo một lần thì mãi mãi như thế, ko khi nào biến hóa nữa. Các vươn lên là hoặc đối tượng người sử dụng vào kịch bản Functional Programming ví như bao gồm thì cần immutable.

Xem thêm: Nữ 1993 Mệnh Gì Năm 2021? Xem Tử Vi Tuổi Quý Dậu Nữ Mạng Sinh Năm 1993

Code gắng này không phải là Functional Programming vị x và y bị đổi khác.

var x = 5;var y = 2;while (x Mutable là điều buổi tối kỵ trong Functional Programming. Cần yêu cầu giảm bớt đến mức phải chăng nhất. Các mẫu coding convention với best practices thịnh hành hiện nay phần nhiều khuyến nghị áp dụng const để khai báo, quăng quật hẳn var , cùng cần sử dụng let đúng liều lượng.

Đối với Object, ta đề xuất cần sử dụng Object.freeze để loông xã toàn cục trực thuộc tính. Cũng hoàn toàn có thể cần sử dụng Object.defineProperty, Object.defineProperties để loông xã một vài nằm trong tính quan trọng. Các chiến thuật này mọi chỉ cung cấp 1 cung cấp nằm trong tính. Phải chủ động code thêm nếu còn muốn vận dụng lên các thuộc tính con.

Nếu dự án công trình đủ tinh vi, hãy suy nghĩ áp dụng những thư viện chuyên sử dụng nhỏng Immutable.js, Baobap...

Purity

Purity là tính thuần khiết, đơn thuần, sự trong sạch, không trở nên trộn tạp.

Đây là chế độ vật dụng nhị vào Functional Programming: toàn bộ những hàm những cần là pure function, không tồn tại hiệu ứng phú (side effect), ko được ảnh hưởng tác động lên bất cứ giá trị như thế nào phía bên ngoài nó, cũng nói không cùng với chỉnh sửa tđắm say số input đầu vào.

Hàm dưới đây không phải pure function vì nó sửa đổi DOM element phía bên ngoài với chuyển đổi quý giá cất vào localStorage.

const updateView = (html) => let $view = document.getElementById("panel"); $view.innerHTML = html; localStorage.setItem("panelCache", html); return $view;đặc điểm đặc trưng nữa của pure function là với mỗi tập cực hiếm nguồn vào nhất quyết, luôn có một và chỉ còn 1 công dụng trả về khớp ứng. Đây là đặc điểm của hàm số toán học.

Hàm tiếp sau đây chưa phải pure function vì chưng trả về kết quả không giống nhau mang đến cùng đầu vào:

const getDuration = (timestamp) => return Date.now() - timestamp;;Pure function trong Functional Programming thường xuyên ngắn gọn, đơn giản và chỉ xử trí nhất 1 vụ việc xúc tích.

Đây là 1 trong những pure function gớm điển:

const add = (a, b) => return a + b;;Dù bạn có gọi hàng nghìn lần thì add(3, 2) vẫn luôn luôn trả về 5.

Viết unit thử nghiệm đến pure function là trách nhiệm dễ chịu nhỏng đi dạo cùng một đàn bà ngây thơ sạch sẽ vậy!

Immutability với Purity là 2 đặc thù cơ phiên bản độc nhất của Functional Programming, được cho phép biệt lập cùng với các chế độ thiết kế khác. Tu tin đưa tu luyện theo tuyến đường này nhất quyết buộc phải duy trì tâm niệm "immutable" cùng "pure" vào từng gần kề na.

`

Phần 1 của chăm đề Functional Progamming xin dừng tại chỗ này. Thanks for reading.

Xem thêm: Stem Nghĩa Là Gì ? Stem Và Steam Là Gì

Chú thích

1, Chữ Tàu ghi Alan Turing là 艾伦图灵 - Ngải Luân Đồ Linh, Alonzo Church là 阿隆佐邱奇 - A Long Tá Khâu Kỳ.


Chuyên mục: Chia sẻ