cscalfani/so-you-want-to-be-a-functional-programmer-part-1-1f15e387e536#.zea49999j

*

Việc rõ ràng, ngộ ra concept của Functional Programming thường là một trong những Một trong những bước cải cách và phát triển đặc biệt quan trọng tuyệt nhất vào sự nghiệp lập trình của chúng ta, và thỉnh thoảng cũng chính là bước trở ngại nhất. Tuy nhiên chúng ta có thể vượt qua nó một phương pháp thuận lợi cùng với cách tiếp cận đúng chuẩn. Bài viết tiếp sau đây đang chỉ dẫn đều fan đến được cùng với vùng chân lý kia.

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

Bắt đầu từ các việc học tập lái xe

*

Lần đầu tài xế thường xuyên là những kỉ niệm nhức tmùi hương với khốn khổ tuyệt nhất của bọn họ. Sẽ thiệt dễ dãi Lúc nhìn tín đồ không giống lái, mà lại Lúc thực thụ đặt tay vào vô-lăng, gần như sản phẩm bỗng dưng trngơi nghỉ nên trở ngại hơn họ tưởng. Và họ sẽ buộc phải tập dượt bởi xe pháo của mái ấm gia đình cho đến khi có thể làm chủ đa số phần đường xung xung quanh nhà trước khi bay xác lên cung con đường cao tốc. Nhưng sau cùng thì trải qua quá trình rèn luyện lặp đi tái diễn với một số khoảng tầm thời hạn khiến gia đình thót tyên, cuối cùng chúng ta cũng biến thành học được biện pháp tài xế với gồm bởi lái mang đến riêng bản thân.

Với tấm bởi lái trong tay, chúng ta cũng có thể lái bất kể cái xe nào nếu rất có thể nổ trang bị. Và cùng với từng chuyến du ngoạn, sự sáng sủa, làm chủ tay lái sẽ càng ngày càng được củng cố. Và cũng trở thành mang lại mẫu ngày họ buộc phải tài xế cuả tín đồ khác, xuất xắc là đề nghị cố cái xe cà tàng bởi một chiếc mới tân tiến hơn.

Cảm xúc Khi lái một loại xe pháo khác đang như thế nào nhỉ? Liệu có tương tự cùng với xúc cảm khi đầu tiên sờ tay vào vô lăng? Không hẳn. Lần trước tiên tài xế, bọn họ trọn vẹn ngạc nhiên. Mặc dù trước này đã ngồi bên trên xe pháo dẫu vậy chúng ta chỉ gồm phương châm là quý khách. Còn lầu trước tiên tài xế là lúc bao gồm qtoàn quyền điều khiển dòng xe cộ kia. Còn cùng với lần lái chiếc xe pháo máy hai trnghỉ ngơi đi, họ chỉ tìm kiếm tìm câu trả lời đến các câu hỏi dễ dàng : Chìa khóa chỗ nào nhỉ? Đèn chỗ nào nhỉ? Chỉnh gương cùng với đèn chiếu nơi đâu ta? Sau gần như thắc mắc đó, gần như máy diễn ra thiệt tự nhiên và thoải mái như nước rã mây trôi, Việc lái xe thật dễ ợt rộng lừng chừng bao nhiêu lần so với thứ 1 thay lái.

Nguyên ổn do đến vụ việc bên trên là cái xe pháo mới đã vận hành như thể ngay gần hết dòng xe cũ. Cả 2 chiếc xe cộ đều phải sở hữu đầy đủ thứ cơ phiên bản mang đến bài toán tài xế, và các lắp thêm kia đa số đông đảo làm việc và một vị trí

Một vài trang bị nho nhỏ dại sẽ tiến hành biến hóa, hoặc thêm chí gồm thêm vài tính năng lạ, nhưng lại bọn họ hầu như sẽ không cần sử dụng chúng nó vào lần trước tiên, thậm chí còn lần thứ 2. Dần dần dần ở đầu cuối chúng ta new học áp dụng các tính năng lạ, mà lại chỉ với những hào kiệt mà bọn họ quyên tâm thôi.

Việc học tập lập trình sẵn cũng như nlỗi học tập lái xe vậy. Lần thứ nhất bao giờ cũng là lần trở ngại nhất. Nhưng khi bạn đang thân quen rồi, thì những lần sau sẽ trlàm việc đề xuất dễ dàng rộng không hề ít.

Mỗi khi bạn bắt đầu việc học tập một ngôn từ mới, sẽ có một số trong những thắc mắc các bạn sẽ hay tự hỏi bản thân như thể : *Làm núm làm sao nhằm sinh sản một module? Làm vậy làm sao để search tìm trong một mảng? Tđam mê số cho hàm thay thế sửa chữa chuỗi là gì? *

Quý Khách hoàn toàn trường đoản cú có niềm tin rằng bản thân sẽ sử va được ngôn ngữ new này, chính vì nó gợi nhớ lại cho bạn những kỉ niệm, hiểu biết cùng với ngữ điệu cũ, cùng với một đôi nét mớ lạ và độc đáo cùng với mong muốn rằng làm cho cuộc đời của người tiêu dùng trlàm việc phải đẹp đẽ hơn.

Đến nhỏ tàu ngoài hành tinh đầu tiên

*

Giờ hãy thử tưởng tượng rằng chúng ta đã lái hàng tá xe pháo xe hơi trong cuộc sống, rồi mang đến một ngày các bạn được đặt vào vùng điều khiển của một cái Tàu không gian. Hiện giờ chúng ta bỗng dưng trnghỉ ngơi buộc phải sợ hãi, chần chừ rằng liệu hầu như kinh nghiệm tay nghề tài xế có mang lại lợi ích được gì cho mình ko. quý khách cảm hứng như mình sẽ ban đầu lại từ con số 0 tròn trĩnh. (Chúng ta là xây dựng viên, bọn họ đếm tự số 0)

Quý khách hàng hoàn toàn có thể bước đầu bài toán luyện tập cùng với cảm giác rằng hồ hết thiết bị vẫn trngơi nghỉ đề nghị siêu không giống sinh sống vào không khí, và biện pháp quản lý và vận hành bé tàu khác hoàn toàn này sẽ rất không giống so với câu hỏi tài xế xung quanh khu đất.

Tuy nhiên thì các định qui định đồ dùng lý phần đông ko đổi khác. Chỉ khác ở chỗ phương pháp chúng ta di chuyển vào và một thiên hà mà lại thôi.

Và với Việc học tập Functional Programming (lập trình sẵn hàm) cũng như như vậy. quý khách hàng dự đoán thù, cảm xúc rằng phần nhiều thiết bị sẽ rất khác. Khác mang đến nỗi mà để cho các kinh nghiệm, kiến thức và kỹ năng đã từng đạt được có khả năng sẽ bị xóa bỏ, ko quay lại được nhỏng xưa nữa. Và phần đa vật dụng sẽ được khởi đầu bằng lời nói kinh điển sau đây.

Quên tất cả đầy đủ sản phẩm công nghệ đã biết

*
Mọi tín đồ cực kỳ phù hợp lời nói sau đây, cùng nó cũng rất đúng trong những đa số những ngôi trường hợp: Học thiết kế hàm (FP) cũng như bước đầu lại hầu như máy vậy. Không trọn vẹn là điều này, nhưng mà kia là 1 trong những cân nhắc hơi tác dụng Khi tiếp xúc cùng với FP.. Có không hề ít concepts giống như nhau thân lập trình nhưng mà bạn vẫn biết với FP, tuy vậy việc tiếp cận FPhường. cùng với bốn tưởng rằng bản thân sẽ phải học lại toàn bộ hồ hết thứ thường xuyên tỏ ra kết quả nhất.

Với cách tiếp cận đúng chuẩn, các bạn sẽ gồm có bốn tưởng, lưu ý đến đúng mực, là phần lớn lắp thêm để giúp bạn không bỏ cuộc lúc bài toán học tập trsinh hoạt yêu cầu trở ngại.

Bạn đang cần khẳng định rằng có nhiều thiết bị nhưng mà chúng ta đã có lần học tập và có tác dụng quen thuộc trên tuyến đường làm lâp trình viên trường đoản cú trước cho tiếng, khi tới với FPhường, sẽ biến mất hoặc bắt buộc thực hiện được nữa.

Liên hệ cùng với câu hỏi lái xe, chúng ta cũng có thể quen thuộc với việc cần sử dụng số lùi để đậu xe. Tuy nhiên một bé tùa không gian đang không có số lùi. Có thể bạn sẽ cho rằng : CÁI GÌ CƠ? KHÔNG CÓ SỐ LÙi!?! TÔI LÁI TÀU THẾ QUÁI NÀO KHI KHÔNG CÓ SỐ LÙI BÂY GIỜ?!

Thực tế là tàu không gian rất có thể dịch rời vào không gian 3 chiều (ô tô là 2 chiều), nên sẽ không còn phải số lùi. lúc bạn nắm vững phương pháp buổi giao lưu của tàu không gian, bạn sẽ không cần thiết phải sử dụng số lùi thêm một lượt nào nữa. Và rồi các bạn sẽ thấy rằng mấy chiếc xe thật là cùi =)) Với FPhường cũng vậy, tuy nhiên:

Học FPhường. đang mất thời hạn. Vì cầm cố hãy kiên nhẫn

Và giờ bọn họ cùng cho cùng với miền khu đất hứa hẹn của Functional Programming, làm lơ vùng đất nóng bức, buốn chán của Imperative Programming vẫn thừa thân thuộc.

Những gì dược viêt tiếp theo sau đó là một series bài viết reviews các Concepts của FP cùng với mục tiêu giúp tín đồ đọc có tác dụng quen thuộc trước lúc lấn sân vào bất kể ngữ điệu thiết kế FPhường như thế nào. Hoặc nếu bạn đã thực hiện FPhường rồi, thì phía trên sẽ là bài viết giúp đỡ bạn hiểu rõ rộng gần như bài toán mình đang có tác dụng .

Và mong mỏi các bạn không lập cập. Hãy dành thời hạn gọi đa số gì tôi sắp tới viết tiếp sau đây, cũng tương tự dành riêng thời gian nhằm đọc phần đa đoạn code ví dụ. quý khách hàng có thể tạm ngưng sau từng đoạn để kỹ năng và kiến thức ngnóng hoàn toàn vào tín đồ, sau đó hãy trở về với thường xuyên.

Điều quan trọng tốt nhất là kỹ năng và kiến thức của bạn.

Concept 1: Purity - Sự thuần khiết

*

khi rất nhiều lập trình sẵn viên FPhường nói về Purity, kia là khi họ có nhu cầu đề cùa đến Pure Function .

Pure Function là những hàm hết sức đơn giản và dễ dàng, chỉ làm việc dựa vào tham mê số nguồn vào.

Đây là 1 trong ví dụ về một hàm được Call là Pure vào Javascript :

var z = 10;function add(x, y) return x + y;quý khách hàng có thể nhận thấy rằng hàm add không còn đụng vào thay đổi z. Hàm đó không phát âm giá trị của trở nên z, tương tự như ko đổi khác cực hiếm vươn lên là z. Nó chỉ dễ dàng là gọi 2 tđắm say số x và y, là 2 tsay mê số đầu vào, rồi trả về giá trị là tổng của 2 tsi số kia.

Hàm add, bởi lý cho nên vì vậy, được Gọi là Pure Function. Nếu hàm add có ngẫu nhiên cách xử trí làm sao liên quan cho biến chuyển z, hàm này sẽ không thể là pure nữa.

Chúng ta cùng tìm hiểu thêm một hàm khác:

function justTen() return 10;Nếu hàm justTen là pure, thì nó chỉ hoàn toàn có thể trả về một cực hiếm độc nhất vô nhị, cố định và thắt chặt.

Nguyên nhân nguyên nhân là hàm này không tồn tại bất cứ một tmê say số làm sao. Và nhằm đảm bảo an toàn nó là pure function, hàm này sẽ không còn thể truy cập bất cứ quý hiếm như thế nào ngoài những ttê mê số của nó. Ở phía trên không có tsay mê số nào, nên cực hiếm trả về của hàm này cơ hội nào cũng là 1 trong những giá trị thắt chặt và cố định.

Và pure function mà lại không tồn tại tsi mê số nào nhằm triển khai thì có vẻ như khá bất nghĩa, với bọn họ bắt buộc sửa chữa thay thế hàm justTen bởi một hằng số (constant) thì tốt rộng.

Hầu hết những Pure Function đều phải sở hữu tối thiểu một tmê man số.

Tiếp theo họ mang lại với một hàm khác:

function addNoReturn(x, y) var z = x + yDễ dàng nhận thấy rằng hàm addNoReturn không có giá trị trả về. Hàm này chỉ đơn giản dễ dàng là cách xử lý việc cộng 2 tđam mê số x cùng y rồi giữ vào trở nên z, nhưng mà ko trả về giá trị tông.Đây tuy vậy vẫn là 1 trong pure function lúc nó chỉ cách xử lý những tđê mê số của bản thân. Nó tiến hành câu hỏi cộng 2 input đầu vào, nhưng lại bởi ko trả về bất cứ quý hiếm gì, vì thế nó có hại (vì chưng họ không có bí quyết nào lấy giá tốt trị đã làm được xử lý).

Một Pure Function chỉ có mức giá trị áp dụng Khi có giá trị trả về.

Và giờ chúng ta trở về hàm add ban sơ một đợt nữa :

function add(x, y) return x + y;console.log(add(1, 2)); // prints 3console.log(add(1, 2)); // still prints 3console.log(add(1, 2)); // WILL ALWAYS print 3cũng có thể thấy rằng Việc thực hiện add(1,2) luôn luôn trả về quý hiếm 3. Không bắt buộc là một trong điều gì quá kinh ngạc, dẫu vậy điều đó chỉ rất có thể tiến hành nếu hàm sẽ là pure function. Nếu hàm add áp dụng bất kì một biến đổi như thế nào làm việc bên phía ngoài, thì các bạn sẽ không lúc nào dự đoán được hiệu quả trả về

Pure Function sẽ luôn trả về thuộc output với cùng đầu vào, bất kể gồm tiến hành từng nào lần.

Xem thêm: Tải Adobe Premiere Pro Cc 2018 Full Crack Sinhvienit, Tải Adobe Premiere Pro Cc 2018 Full Bản Quyền

Vì pure function sẽ không còn ảnh hưởng tác động đến những phát triển thành nằm kế bên bọn chúng, yêu cầu các hàm sau sẽ tiến hành xem như là impure (ko thuần khiết =)) ):

writeFile(fileName);updateDatabaseTable(sqlCmd);sendAjaxRequest(ajaxRequest);openSocket(ipAddress);Tất cả những hàm này đều phải có một tính năng tầm thường được call là Side Effects (tính năng phụ). khi bạn Call cùng tiến hành chúng, những hàm này đang chuyển đổi file, cập nhật cơ sử dữ liệu, gửi data về phía server hoặc Call hệ điều hành quản lý để lấy socket. Chúng làm cho những máy hơn là chỉ thao tác với tmê mệt số đầu vào cùng trả về output. Vì cụ, bạn cũng có thể không bao giờ dự đoán được giá trị nhưng mà hầu hết hàm này đang trả về.

Pure Function đảm bảo việc hàm đang không tồn tại Side Effects.

Trong các ngữ điệu Imperative Language như thể Javascript, Java, xuất xắc C#, Side Effects lộ diện sinh hoạt mọi hầu như nơi. Điều này khiến cho bài toán debug hết sức khó vày thay đổi hoàn toàn có thể được đổi khác nghỉ ngơi ngẫu nhiên đâu trong công tác. Vì nắm Lúc tất cả một lỗi xẩy ra bởi một biến hóa thay đổi thành quý giá không muốn ao ước, bạn sẽ yêu cầu tìm kiếm nghỉ ngơi đâu? Khắp phần lớn ngỏng ngách? Điều đó thiệt ko giỏi chút nào.

Đến trên đây, hoàn toàn có thể bạn sẽ thắc mắc rằng: VẬY LÀM THẾ QUÁI NÀO MÀ TÔI CÓ THỂ LÀM VIỆC CHỈ VỚI PURE FUNCTION CHỨ?!

Trong FP, Pure Function không phải là sản phẩm độc nhất cơ mà bạn sẽ vieests.

FPhường. tất yêu sa thải trọn vẹn Side Effects, mà chỉ rất có thể cô lập bọn chúng. Vì các phần mềm đề xuất tiếp xúc, thao tác với thế giới thực, nên một số trong những nguyên tố sẽ phải impure. Mục tiêu của FPhường là buổi tối tphát âm hóa hết nút có thể số lượng impure code cùng tách biệt bọn chúng hoàn toàn khỏi các phần không giống của lịch trình.

Concept 2 - Immutability : Sự bất biến

*

Bạn còn ghi nhớ thứ 1 thấy được mẫu code hình dạng nlỗi này chđọng :

var x = 1;x = x + 1;Khi đó, hẳn là fan làm sao kia dạy dỗ bạn lâp trình đã nói rằng : Hãy quên đông đảo gì vẫn học tập ở môn Toán đi? Vì trong toán học tập, x ko lúc nào bởi x+1 được cả

Nhưng trong các ngỗn ngữ Imperative sầu Programming, các câu lệnh bên trên Tức là, lấy quý giá ngày nay của biến hóa x, cộng nó thêm 1 với gán kết quả trả về vào lại trở thành x.

Tuy nhiên lịch sự đến FPhường, x = x + 1 lại biến hóa không ổn, ko được phép. Và bạn sẽ bắt buộc nhớ lại số đông gì mà các bạn đã trở nên bắt đề nghị quên trước đó về tân oán học. Hmilimet...

Trong Functional Programming không có khái niệm về đổi thay (variable)

Để lưu trữ những quý hiếm, khái niệm trở thành (variable) vẫn được áp dụng, tuy thế các đổi thay này đầy đủ là hằng số (constant), tức là nếu đổi mới x đang giữ một quý hiếm nào kia (là 1 chẳng hạn), thì cực hiếm của biến x sẽ không biến hóa, vẫn không thay đổi là một nlỗi ban sơ được mix (và chúng ta Call là đổi thay hằng số - constant variable)

Nếu bạn đang lo ngại về bộ lưu trữ, thì chúng ta cũng có thể an tâm lúc vào FP., x hay chỉ nên trở nên cục bắt buộc thời gian lâu dài thường xuyên siêu nđính. Tuy nhiên trong suốt thời gian lâu dài, giá chỉ chị của x là không bao giờ thay đổi.

Đây là 1 trong ví dụ về trở nên hằng số vào Elm, một ngôn ngữ thuần FP.. mang đến xây dựng Web:

addOneToSum y z = let x = 1 in x + y + zNếu bạn lạ lẫm với syntax dạng ML-Style , hãy để tôi phân tích và lý giải. Hàm addOneToSum thừa nhận 2 tđắm say số là y cùng z.

Trong bloông xã của let, đổi mới x được gán với giá trị 1, Có nghĩa là x sẽ lưu lại giá trị đó trong suốt phần đời của chính nó. Vòng đời của x đang hoàn thành khi hàm xong xuôi chạy, rõ ràng rộng là sau khoản thời gian bloông chồng let được triển khai.

Bên trong bloông chồng in, những loại lệnh rất có thể cất cùng tsi mê chiếu mang lại những giá trị được quan niệm trông phần bloông xã let, sinh hoạt đây là x. Kết trái của vấn đề tính tân oán x + y + z được cách xử trí và trả về, rõ ràng rộng ngơi nghỉ đấy là 1 + y + z sẽ tiến hành tính toán thù trả về, vị x = 1.

Và bạn có thể thấy hồi hộp nhưng mà thắc mắc rằng : TÔI LÀM TRÌNH KIỂU MÉO GÌ KHI MÀ KHÔNG CÓ BIẾN SỐ ĐÂY?!

Hãy yên tâm với nghĩ về mang đến thời gian cơ mà bạn muốn chuyển đổi quý hiếm của trở nên số. Sẽ tất cả 2 ngôi trường đúng theo cơ phiên bản khiêu vũ ra trong đầu chúng ta : Txuất xắc thay đổi biến hóa số chứa được nhiều quý hiếm (vd nhỏng chuyển đổi một/những thuộc tính của một đối tượng người sử dụng hoặc phiên bản ghi) với biến hóa trở nên số đựng một quý hiếm (vd như cỗ đếm trong khoảng lặp).

FP cách xử lý bài toán chuyển đổi những quý hiếm trong một bạn dạng ghi bằng phương pháp tạo nên một phiên bản sao của phiên bản ghi cùng với dữ liệu được update. FP xử trí trường hợp thay đổi giá trị này bằng cách: ko copy lại toàn bộ những nguyên tố của bản ghi, mà áp dụng những cấu tạo tài liệu nhằm thực hiện việc này một biện pháp tác dụng duy nhất.

Về việc xử lý trường thích hợp chuyển đổi vươn lên là số chứa một quý giá, FP cũng làm cho tương tự nlỗi bên trên, cũng bằng cách tạo ra một bạn dạng sao của biến chuyển số kia.

Và đang KHÔNG bao gồm vòng lặp trong FP.. đâu.

ĐẦU TIÊN THÌ KHÔNG CÓ BIẾN, VÀ GIỜ THÌ KHÔNG CÓ VÒNG LẶP?! GHÉT RỒI ĐẤY

Bình tình làm sao. Không phải là họ cần yếu tạo ra những vòng lặp vào FP (tôi ko đùa chữ đâu nhé), mà chỉ đơn giản dễ dàng là chúng ta đang không có những kết cấu lặp như là for, while, vị, repeat, ... thôi.

Functional Programming sử dụng đệ quy đến bài toán lặp.

Dưới đây là 2 bí quyết triển khai vòng lặp trong Javascript:

// simple loop constructvar acc = 0;for (var i = 1; i 10; ++i) acc += i;console.log(acc); // prints 55// without loop construct or variables (recursion)function sumRange(start, kết thúc, acc) if (start > end) return acc; return sumRange(start + 1, kết thúc, acc + start)console.log(sumRange(1, 10, 0)); // prints 55Quý Khách rất có thể thấy rằng, bởi câu hỏi thực hiện đệ quy, bạn có thể thực hiện được đúng như những gì mà vòng lặp for bên trên đang triển khai. Với câu hỏi sử dụng hàm sumRange gọi lại chính nó sau mỗi lần chạy cùng với tđắm say số start new (start + 1) cùng tham mê số acc new (acc + start). Hàm này không thể đổi khác các quý giá new. Ttuyệt vào đó nó sử dụng các giá trị new được xem toán thù từ bỏ những giá trị cũ.

Thật rủi ro, Việc này khá là khó để hoàn toàn có thể thấy được ví dụ vào Javascript, bao gồm cả chúng ta vẫn bỏ ra chút ít thời hạn nhằm nghiên cứu và phân tích về nó, vị 2 nguyên do dưới đây. Thứ tuyệt nhất là do syntax vào Javascript khá là tương đối khó quan sát cùng sản phẩm hai, là chúng ta có thể không quen cùng với tứ duy xem xét theo đệ quy.

Nếu áp dụng Elm, vấn đề hiểu đang trnghỉ ngơi đề xuất thuận lợi rộng, với do đó, dễ hiểu hơn đối với bạn:

sumRange start kết thúc acc = if start > over then acc else sumRange (start + 1) end (acc + start) Đây là công dụng đoạn code bên trên thực hiện:

sumRange 1 10 0 = -- sumRange (1 + 1) 10 (0 + 1)sumRange 2 10 1 = -- sumRange (2 + 1) 10 (1 + 2)sumRange 3 10 3 = -- sumRange (3 + 1) 10 (3 + 3)sumRange 4 10 6 = -- sumRange (4 + 1) 10 (6 + 4)sumRange 5 10 10 = -- sumRange (5 + 1) 10 (10 + 5)sumRange 6 10 15 = -- sumRange (6 + 1) 10 (15 + 6)sumRange 7 10 21 = -- sumRange (7 + 1) 10 (21 + 7)sumRange 8 10 28 = -- sumRange (8 + 1) 10 (28 + 8)sumRange 9 10 36 = -- sumRange (9 + 1) 10 (36 + 9)sumRange 10 10 45 = -- sumRange (10 + 1) 10 (45 + 10)sumRange 11 10 55 = -- 11 > 10 => 5555quý khách hoàn toàn có thể nhận định rằng vòng lặp for vẫn dễ nắm bắt rộng. Trong lúc vụ việc này vẫn đang được tranh cãi xung đột hơi là các, mà hoàn toàn có thể nguyên nhân đa số là do sự thân quen thuộc, thì gồm một sự thật là các vòng lặp for đề xuất mang đến kỹ năng chuyển đổi của hàm số, nhưng điều đó được hiểu ko tốt trong FP..

Tôi sẽ không còn phân tích và lý giải chi tiết đa số lợi ít của tính không thay đổi trong bài viết này, tuy nhiên bạn cũng có thể xem phần Global Mutate State vào nội dung bài viết Vì sao Lập trình viên cần có giới hạn nhằm biết thêm cụ thể.

Một tiện ích rõ ràng của tính bất biến, đó là nếu khách hàng yêu cầu truy cập mang lại một quý hiếm bất kỳ vào công tác của bạn, các bạn chỉ rất có thể có quyền phát âm nó, cùng điều đó tương tự cùng với Việc không ai có thể biến hóa quý hiếm của chính nó. Kể cả bao gồm bạn. Và cho nên vì vậy sẽ tránh khỏi hồ hết chuyển đổi không hề mong muốn.

Và nếu công tác của người tiêu dùng cung cấp đa luồng (multi-threaded), thì sẽ không có ngẫu nhiên một thread làm sao có thể khiến cho các bạn hoa mắt. Giá trị được set sẽ là hằng số, với ví như bất kì một thread nào ước ao đổi khác nó, thread này sẽ phải khởi tạo một quý giá bắt đầu tự mẫu cũ.

Quay quay trở về những năm 90, tôi đã có lần viết một Game Engine đến trò nghịch Creature Crunch , và nguyên nhân tạo ra những bug nhất đó là những vụ việc tương quan mang lại xử lý đa luồng. Tôi ước gì tôi đã biết về Tính không bao giờ thay đổi dịp kia. Mà thực ra điều tôi quyên tâm nhất lúc ấy là sự việc khác nhau giữa vận tốc phát âm 2x cùng 4x của ổ đĩa CD-ROM sẽ ảnh hưởng chũm làm sao đến hiệu năng chạy game.

Tính không bao giờ thay đổi tạo nên các mẫu code dễ dàng và đơn giản rộng cùng an toàn hơn

Đầu của tôi!!!!

Tạm thời cho phía trên thôi là đủ.

Trong những phần sau của nội dung bài viết này, tôi đã nói về các vấn đề như thể High-order Function, Functional Composition, Curring, v..v...

Phần tiếp theo mời các bạn coi ở đây : Part 2

Nếu bạn muốn tyêu thích gia vào xã hội những đơn vị trở nên tân tiến website hy vọng học với giúp đỡ lẫn nhau về FP vào Elm, mời chúng ta tmê mẩn gia Group Facebook sau: Learn Elm Programming