Trong nhân loại kiếm hiệp Kyên ổn Dung, Trương Tam Phong là nhân vật dụng có võ công cao nhất (theo Klặng Dung). Bởi vày ông cài cỗ võ thuật Thái Cực Quyền với Thái Cực Kiếm. Tinh hoa võ công khác hẵn trọn vẹn với quả đât võ công hiện đại. Lấy nhu tương khắc cương.Keyword: Functional programming.

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

Thế giới lập trình sẵn cũng vậy. Lập trình phía đối tượng người tiêu dùng (OOP) luôn được xem là tinch hoa của võ thuật.

Các chúng ta tiếp cận cùng với OOPhường khôn cùng sớm, ngay lúc bắt đầu ban đầu học lập trình sẵn.

Có tương đối nhiều fan nhận định rằng OOP là mô hình để xây đắp ứng dụng rất tốt. Và mình xin đề cập lại, OOPhường là quy mô đem đối tượng người tiêu dùng (object) làm gốc.

Mình ví OOPhường như thể thế giới võ công tiên tiến trong Kyên ổn Dung. Vậy Thái Cực Quyền vào trái đất lập trình sẵn là gì?

Quý Khách vẫn lúc nào nghe về functional programming chưa? Lập trình theo phong cách lấy hàm (function) là trung chổ chính giữa.

Bây tiếng, hãy thuộc lấn sân vào trái đất hoàn toàn không giống với phần đông gì bọn họ thường biết với OOPhường.


NỘI DUNG BÀI VIẾT


#2 NHỮNG KHẨU QUYẾT CỦA FUNCTIONAL PROGRAMMING
#1 THÁI CỰC BẮT NGUỒN TỪ ĐÂU?

Ngày xửa thời trước, có nhị cao thủ võ lâm. Alan Turing với Alonzo Church.

Alan Turing thông thuộc môn võ Turing Machine. Còn Alonzo Church thì tăm tiếng với Lambda Calculus.

Cả hai phần lớn là võ lâm cao thủ thời bấy giờ. Đã trãi trải qua không ít cuộc đấu long ttách lnghỉ ngơi đất. Nhưng hồ hết không tách biệt chiến thắng thất bại.

Sau đó, cả hai mới thống tuyệt nhất cùng nhau một bạn dạng hiệp ước Church – Turing.

Khẩu quyết của Turing Machine chính là Việc nắm giữ những trạng thái của tiến trình với state machine.

Còn linc hồn của Lambda Calculustriệu tập mang lại bài toán xuất bản những đặc thù của những hàm toán thù học tập.

Sau này, thiết yếu Turing Machine đang đặt cơ sở cho việc thành lập và hoạt động của lập trình sẵn hướng đối tượng người sử dụng (OOP).Còn Lambdomain authority Calculus là xuất phát Ra đời của Functional Programming (FP).

Lưu ý rằng, hai phe cánh này chỉ cần nhị trong những nhiều trường phái trong võ lâm lúc này. Nhưng đó là nhị phe phái mập nhất!

Lịch sử trôi qua, có vẻ OOPhường chiếm ưu ráng rộng không hề ít so với FPhường. quý khách hàng demo chú ý xung quanh để kiểm bệnh. Các buổi vấn đáp, tức thì trong trường ĐH. quý khách hàng tiếp xúc với OOP tương đối nhiều.

Nhưng tại một trái đất khác, FPhường vẫn luôn luôn âm thầm cải tiến và phát triển từng ngày 1. Hãy nhìn đầy đủ Lisp, F#, Haskell, Clojure, Erlang, … là gần như ngôn ngữ đại diện cho phe phái FP..

Trong 1 thập kỉ quay trở về phía trên. FPhường vẫn trở lại! Người ta ban đầu phàn nàn về OOP..

Đã bao hàm nội dung bài viết trình bày rất rõ ràng về FP.. Họ là hầu hết tín đồ gia dụng, tín đồ cuồng của FPhường. Ví dụ nlỗi bài viết “So You Want khổng lồ be a Functional Programmer” của Charles Scalfani.Thậm chí, Scalfani còn tôn vinh Functional Programming như nấc thang tiến hóa trong lịch sử dân tộc thiết kế. Anh ấy còn có một bài viết khác khiến tranh cãi cực kỳ nhiều! Goodbye, Object Oriented Programming.

*

Trên thực tế! FPhường xuất xắc OOP.. là hai phe cánh tu luyện không giống nhau. Phần như thế nào cũng đều có dòng ưu thế hay ăn hại riêng rẽ. Chúng ta tránh việc so sánh mặt nào ngon hơn!

#2 NHỮNG KHẨU QUYẾT CỦA FUNCTIONAL PROGRAMMING

Trong phần này, bọn họ đang lấn sân vào hồ hết thứ cơ bạn dạng độc nhất vô nhị của FP.. Bước đầu xả thân vào thái cực!

Mình gồm một lưu lại ý: FP là 1 tuyến phố lâu năm. Nếu mong mỏi giác ngộ, các bạn cần kiên trì! Và vào nội dung bài viết này, mình cần yếu đi hết các khẩu quyết (concept) của FP. Vì đơn giản là không đủ!

Functional Programming là phương thức xây dựng mang function làm đơn vị chức năng thao tác cơ phiên bản.

Về lphát minh, FP.. chỉ bao gồm function với function. Không tất cả lệnh gán, không có vòng lặp, không có trạng thái toàn thể. Trong FPhường, bọn họ đã kết hợp các function lại với nhau và khiêu vũ múa cùng với chúng!

Phải bảo rằng FPhường vẫn từ từ trở về nhân loại lập trình sống hiện đại. Bằng triệu chứng là các phiên bản update của những ngữ điệu, framework mới. Đang dần dần hướng đến FP (như Javascript, Pynhỏ nhắn, Golang, …).quý khách hãy nhìn vào ReacJS, một framework với 70% FP.. với 30% OOPhường (nói theo một cách khác rằng như thế).

Các lập trình sẵn viên tiến bộ thường xuyên phối hợp sự linch hoạt của OOPhường. với FPhường lại với nhau. Mục đích cuối cùng là để có được một chương trình đúng, nkhô nóng, gọn, đẹp.

Và để hoàn toàn có thể lao vào thế giới Functional Programming. Quý Khách đề xuất học một số khẩu quyết quan trọng đặc biệt sau!

IMMUTABILITY HAY TÍNH BẤT BIẾN

Khẩu quyết thứ nhất của functional programing là: Những gì đã có được knhị báo trước đó thì ko được biến hóa nữa!

Nghĩa là phần đông thứ đã có được khai báo trước kia. Sẽ không bao giờ được thay đổi trong quá trình chạy chương thơm trình!quý khách gồm thấy điều này lạ không? Khác hẵn cùng với số đông gì ta đang học tập vào OOPhường. Những tứ duy lập trình cũ. Nhưng nó đó là khẩu quyết thứ nhất của FPhường – tính bất biến.

Xem thêm: Hiệp Sĩ Môi Trường Jane Goodall Là Ai, Hiệp Sĩ Môi Trường Jane Goodall Tới Việt Nam

Chúng ta cùng mang một ví dụ về tính không thay đổi và ko bất biến:

/* Đoạn code tiếp sau đây không phải là không bao giờ thay đổi bởi vì giá trị trở nên bị đổi khác */var immutabilityVar = "lenhattkhô hanh.com";immutabilityVar = "coderdocs.info";/* Còn đoạn code tiếp sau đây toại ý tính không thay đổi của FPhường. */var immutabilityVar = "lenhattkhô nóng.com";var immutabilityVar2 = "coderdocs.info";Bất biến là khẩu quyết về tối đặc biệt trong FPhường. Nếu viết code theo phong cách FPhường, bạn cần tiêu giảm về tối đa bài toán biến đổi cực hiếm biến hóa tốt object. Tốt duy nhất là tránh việc chuyển đổi, những máy vào FP.. cần là const.

Khi ES6 release, đang đã tạo ra 2 biện pháp knhị báo mới là const và let. Người ta khuyên rằng đề nghị cần sử dụng const và sử dụng let chỉ lúc nào cần thiết.

Quý Khách có lưu giữ cho tới vòng lặp for, while không? Những vòng lặp này hay cần sử dụng một đổi thay index để mắt vòng lặp. Và vị tính bất biến, cần FP đã loại trừ vòng lặp!

Vậy thì bạn sẽ hỏi là, bọn họ đang sử dụng gì nhằm thay thế mang lại vòng lặp?

Đệ quy (recursive), cao hơn bọn họ cần sử dụng một số trong những function không giống. Tùy vào độ tư vấn của ngôn ngữ! Quay lại, đệ quy đang thay thế mang lại vòng lặp. Có nhiều người chắc hẳn rằng xa lạ cùng với tư duy của đệ quy. Nhưng nếu bạn đang lao vào FP, thì nên luyện đệ quy.

/*** Bài toán ngơi nghỉ đó là tính giai vượt của n (n!) * Chúng ta sẽ xử lý bài toán theo vòng lặp với đệ quy**/// Chúng ta viết theo vòng lặp cực kì đối chọi giảnresult = 1;for (i = 1; i Vậy công dụng của tính không thay đổi là gì?

Bạn cũng biết bọn họ tuyệt gặp gỡ bug Lúc biến đổi quý giá của trở nên nhưng chúng ta không điều hành và kiểm soát được. Hoặc những tâm trạng bị biến hóa một bí quyết bất thần. Vì không thay đổi, cho nên việc biến đổi là ko xẩy ra. Nên khủng hoảng rủi ro gặp gỡ bug (vì các đổi thay khiến ra) là nhỏ tuổi rộng và lịch trình dễ dàng debug hơn. Chúng ta thuận tiện kiểm soát và điều hành được giá trị các vươn lên là. Và tránh khỏi phần đa biến hóa không muốn trong lịch trình.

PURITY

Purity là sự việc thật khiết, trinc trắng!

Khẩu quyết thứ 2 vào FP. là.

Tất cả những function các bắt buộc là Pure function. Nghĩa là rất nhiều function này sẽ không được thay đổi bất kể máy gì bên ngoài nó. Không được biến đổi ttê mê số nguồn vào. Không có hiệu ứng prúc (side effect).

Chúng ta cùng lấy một ví dụ về function tất cả hiệu ứng phú.

function handleX (n) const returnVal = n * n + n * 2 + 1; makeAjaxCall(returnVal); return returnVal;Rõ ràng trong function handleX còn gọi thêm Ajax, cùng không biết đang xử trí gì trong số đó. Nên phía trên được Hotline là hiệu ứng prúc. Và function này không hẳn là Pure function.

Javascript xuất xắc hầu hết ngữ điệu nlỗi khác thường có không ít cảm giác phụ side effect. Rõ ràng là công tác họ viết chẳng thể như thế nào thiếu thốn các cảm giác phụ quan liêu trong nhỏng Ajax, tiếp xúc database, … FP vẫn làm cho một trách nhiệm là cô lập và tách bóc biết các hiệu ứng prúc ra. Nhằm mục tiêu hỗ trợ cho code của chúng ta ví dụ. Và nhất là dễ dàng kiểm soát điều hành. Vì hiệu ứng phụ đã làm cho thay đổi quý hiếm đổi thay tốt dòng gì đấy bất kể lúc làm sao.

Trên đây là nhì đặc điểm, khẩu quyết thứ nhất vào Functional Programming. Đây là phần đông đặc thù cơ bản độc nhất vô nhị. Và chắc chắn rằng buộc phải đối với gần như ai mong mỏi lao vào vào con phố này.

HIGHER-ORDER FUNCTION

Higher-order function (HOF) là một function có tối thiểu 1 trong hai điểm lưu ý sau:

Tyêu thích số nguồn vào là 1 hoặc những functionReturn một function

Nảy tiếng chúng ta đã đưa ví dụ về Javascript các rồi. Bây tiếng là ví dụ PHP về Higher-order function.

Function twice vừa gồm tham mê số nguồn vào là 1 function vừa return một function. Cho đề nghị hàm này thừa sức để triển khai một Higher-order function.

Khẩu quyết máy cha này khôn cùng dễ dàng và đơn giản và dễ dàng nắm bắt. Nhưng gồm một thắc mắc được đặt ra. Tại sao cần cần sử dụng Higher-order function?

FP nhỏng trình làng ban đầu! Là một hình dáng lập trình theo phong thái khiêu vũ múa cùng rất function. Higher-order function hỗ trợ cho họ dễ dãi có tác dụng được Việc này. Mọi flow, nngóc ngách, đa số cái chảy code, chúng ta dễ dãi control bọn chúng với HOF.

Giới thiệu về Functional Programming sắp tới thôi. Vì như mình đã nói từ trên đầu bài bác. FPhường là một con phố dài.

FP còn không hề ít khẩu quyết vùng phía đằng sau như: Function Composition, Currying function, Object Composition, không có new/this, class citizens ….

#3 FUNCTIONAL PROGRAMMING VÀ OOP
Functional programmingOOP
Lấy function là đơn vị thao tác làm việc cơ bảnThao tác dựa trên các concept của object
Sử dụng Immutable data Sử dụng Mutable data
Theo quy mô declarative programmingTheo quy mô imperative programming
Hổ trợ Parallel programmingKhông hổ trợ Parallel programming
Function ko chưa side effectsMethod bao gồm đựng side effects
Flow control thực hiện vấn đề call hàm thường dùng đệ quy Flow control sử dụng vòng lặp giỏi câu lệnh if
Thđọng từ triển khai những câu lệnh ko quan trọngThứ đọng trường đoản cú triển khai những câu lệnh cực kỳ quan tiền trọng
Hổ trợ cả “Abstraction over Data” với “Abstraction over Behavior”.Chỉ hổ trợ “Abstraction over Data”.
#KẾT

Bài viết này, mình chỉ trình bày sơ cỗ về functional programming. Và so sánh tí đỉnh nó với thiết kế hướng đối tượng.

Đương nhiên chỉ với số lượng giới hạn một nội dung bài viết. Không thể cover không còn tinc hoa của functional programming. Mình để phần lớn tinc hoa đó đến bọn họ cùng nhau retìm kiếm.

Functional programming đòi hỏi fan luyện đề xuất chuyên chổ chính giữa, kiên định. Không yêu cầu ngày 1 ngày hai nhưng rất có thể luyện thành.

Chúc chúng ta thành công bên trên tuyến đường tu luyện với Functional Programming!

Những nội dung bài viết chúng ta quan yếu quăng quật qua:

Tại sao web developer buộc phải học về digital kinh doanh.Phương thơm pháp trường đoản cú học của một developer đúng nghĩa.Chinc phục thiết kế C cùng với pointer với digital.Thất nghiệp, nỗi lo của sinch viên IT.Đừng tiêu tốn lãng phí khoảng thời gian học tập đại học của bạn.

Bài viết liên quan

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 *