Lập trình chức năng javascript là gì?

Lập trình hàm (viết tắt là FP) là một mô hình lập trình phổ biến trong JavaScript. JavaScript coi các chức năng là công dân hạng nhất và điều này giúp dễ dàng viết lập trình chức năng bằng JavaScript

Why Learning Functional Programming in JavaScript Will Make You a Better Developer

Bài đăng này sẽ cho bạn biết những điều cơ bản và lợi ích của lập trình hàm và cách sử dụng chúng trong JavaScript

Lập trình chức năng là gì?

Lập trình chức năng là một cách viết phần mềm với các nguyên tắc cụ thể. Ý tưởng là những nguyên tắc này sẽ

  • Giúp viết, kiểm tra và gỡ lỗi mã dễ dàng hơn
  • Làm cho nó dễ dàng hơn để suy luận về mã
  • Cải thiện năng suất của nhà phát triển
  • Và nhiều hơn nữa
Nguyên tắc cốt lõi trong lập trình chức năng

Hàm thuần túy

Các chức năng phải thuần túy. Các hàm thuần túy luôn tạo ra cùng một đầu ra và không có tác dụng phụ ảnh hưởng đến đầu ra. Tác dụng phụ là bất cứ thứ gì nằm ngoài tầm kiểm soát của chức năng. e. g. bất kỳ đầu vào/đầu ra (I/O) nào, chẳng hạn như đọc từ cơ sở dữ liệu/tệp hoặc sử dụng console.log. Hoặc thậm chí là một biến tĩnh

Đây là một ví dụ đơn giản

Nhưng tôi cần I/O?

Một ứng dụng không có I/O không hữu ích. Lập trình chức năng không phải là loại bỏ I/O. Thay vào đó, bạn nên tách logic nghiệp vụ khỏi I/O. Bất kỳ tác dụng phụ nào cũng phải được xử lý ở phần rìa của các quy trình của chúng tôi chứ không phải ở phần giữa của chúng. Bằng cách này, bạn đạt được logic kinh doanh thuần túy có thể kiểm tra dễ dàng

JavaScript không phải là ngôn ngữ lập trình chức năng thuần túy. Vì vậy, không có gì ngăn cản bạn làm bất cứ điều gì bạn cảm thấy thoải mái. Mặt khác, Haskell là một ví dụ về ngôn ngữ lập trình chức năng thuần túy. Trong Haskell, bạn buộc phải sử dụng các nguyên tắc lập trình chức năng

Trạng thái bất biến

Trạng thái bất biến có nghĩa là trạng thái không nên thay đổi. Thay vì thay đổi trạng thái, trong lập trình chức năng, chúng tôi sao chép nó. Điều này có vẻ phản trực giác. tại sao chúng ta muốn sao chép trạng thái thay vì thay đổi nó?

Trong JavaScript, bạn có thể chuyển các giá trị theo tham chiếu. Điều này có thể nguy hiểm. Hãy xem một ví dụ

đệ quy

Với đệ quy, các danh sách không được lặp lại bằng cách sử dụng for, while hoặc do...while vì chúng thay đổi trạng thái (ví dụ: tăng bộ đếm). Thay vào đó, trong lập trình chức năng, các hàm như map(), filter()reduce() được sử dụng

Từ "đệ quy" làm tôi sợ hãi trong một thời gian dài, tôi phải thừa nhận. Nhưng trong JavaScript, bạn có thể nhanh chóng thấy được lợi ích của khả năng đọc và năng suất khi sử dụng các hàm này

Hãy xem một ví dụ

Lập trình chức năng trong JavaScript

Mình đã hướng dẫn sơ qua cho bạn cách sử dụng map() rồi. Hãy tìm hiểu thêm về nó

map() lặp lại danh sách của bạn, mỗi lần một phần tử và cho phép bạn thay thế nó bằng một phần tử mới. Điều này hữu ích để cập nhật giá trị cho tất cả các phần tử trong danh sách, chẳng hạn. Sau đó, nó trả về một danh sách mới, giữ nguyên danh sách cũ. Vì vậy, nó tuân theo nguyên tắc lập trình chức năng không sửa đổi trạng thái

Và có hai chức năng nữa mà bạn nên biết, filter()reduce()

filter() sẽ cho phép bạn lọc ra các phần tử không mong muốn khỏi danh sách. Điều này hữu ích để xóa các phần tử đáp ứng các tiêu chí nhất định khỏi danh sách. e. g. "lọc ra trái cây đắt hơn 5. Và cũng giống như map(), nó trả về một danh sách mới

reduce() sẽ cho phép bạn "thu nhỏ" danh sách các phần tử thành một giá trị duy nhất. Điều này rất hữu ích khi làm việc với các con số

Chức năng này là chức năng khó hiểu nhất đối với tôi. Tôi khuyên bạn nên xem Tài liệu web MDN về nó

Sự kết luận

Bây giờ bạn đã biết lập trình hàm là gì, tại sao nó hữu ích và cách sử dụng nó trong JavaScript. Có thể mất một chút thời gian để làm quen nhưng rất đáng để nỗ lực. Các chức năng chúng tôi đề cập có sẵn trong tất cả các ngôn ngữ lập trình chính. Đây không phải là thứ dành riêng cho JavaScript

- [Giảng viên] Đầu tiên, chúng ta sẽ nói về một số khái niệm cốt lõi của lập trình hàm. Bây giờ, có nhiều định nghĩa khác nhau về lập trình hàm, tùy thuộc vào người bạn hỏi, nhưng hầu hết họ đều đồng ý về các khái niệm sau. Trước hết, lập trình chức năng tách biệt các chức năng và dữ liệu. Nó tránh thay đổi trạng thái và dữ liệu có thể thay đổi, đồng thời nó coi các chức năng là công dân hạng nhất. Chúng ta hãy đi qua từng điều này một cách ngắn gọn để bạn có thể thấy những gì tôi muốn nói. Khái niệm đầu tiên, tách biệt dữ liệu và chức năng, được minh họa rõ nhất bằng cách so sánh với lập trình hướng đối tượng, vốn không tuân theo khái niệm này. Lập trình hướng đối tượng, như chúng ta thấy trong lớp đơn giản này đại diện cho một người, thích nhóm dữ liệu của nó lại với nhau với các chức năng chịu trách nhiệm vận hành trên dữ liệu đó. Chẳng hạn, chúng ta có biến này, tuổi và sau đó chúng ta có một hàm chịu trách nhiệm tăng biến. Ngược lại, lập trình hàm lưu trữ dữ liệu của nó trong các cấu trúc đơn giản như mảng hoặc hàm băm và tạo các hàm riêng biệt lấy dữ liệu làm đối số và trả về một số loại phiên bản đã chuyển đổi của dữ liệu. Lưu ý rằng trong chức năng này, gainAge, chúng ta đang chuyển đổi một bản sao của đối tượng, không phải chính đối tượng ban đầu. Trong khái niệm tiếp theo, chúng ta sẽ thấy lý do tại sao chúng ta làm điều này. Lợi ích chính của việc làm theo cách này, thay vì sử dụng các lớp, là nó mang lại cho chúng ta tính đa hình ngay lập tức liên quan đến dữ liệu của chúng ta. Ví dụ: hàm chúng tôi đã tạo hoạt động vượt trội với bất kỳ phần dữ liệu nào có trường tuổi. Thông thường, chúng ta sẽ phải tạo các lớp cho từng loại đối tượng và thêm vào một hàm gainAge cho từng loại hoặc loay hoay với việc có một Siêu lớp cho tất cả những thứ có tuổi. Bây giờ chúng ta đến với khái niệm thứ hai. Khi chúng ta nói về khả năng biến đổi và thay đổi trạng thái, đây là điều chúng ta muốn nói. Như chúng ta có thể thấy trong ví dụ đơn giản này, biến lời chào chứa một số giá trị khác nhau trong suốt thời gian tồn tại của nó. Trong một chương trình nhỏ như chương trình này, đây thực sự không phải là vấn đề, nhưng trong một chương trình có kích thước đầy đủ, một biến như thế này có thể chứa nhiều giá trị khác nhau, tùy thuộc vào thời điểm và vị trí mà nó được tham chiếu. Điều này có nghĩa là khi sửa đổi chương trình, chúng ta phải theo dõi tất cả các thay đổi trạng thái mà biến này trải qua, điều này có thể rất khó đối với ngay cả một lập trình viên có kinh nghiệm. Giải pháp cho vấn đề này và mô hình thường thấy trong lập trình hàm là làm cho tất cả dữ liệu của chúng ta trở nên bất biến, thông qua việc sử dụng các hằng số hoặc đơn giản là xử lý dữ liệu của chúng ta theo cách không thay đổi và không thực hiện các thay đổi không cần thiết. Điều này buộc chúng tôi phải tạo một biến mới để biểu thị từng thay đổi mà chúng tôi muốn thực hiện đối với biến ban đầu. Lưu ý rằng, chỉ bằng cách nhìn vào tên của mỗi hằng số, chúng ta có thể suy ra nó chứa những gì và nó có thể được sử dụng cho mục đích gì. Điều này làm cho việc gỡ lỗi dễ dàng hơn nhiều và là một trong những lợi ích lớn của việc viết mã chức năng. Vì trong lập trình chức năng, tất cả dữ liệu của chúng tôi được chứa trong các cấu trúc đơn giản, như tôi đã đề cập trước đây, chi phí sao chép và chuyển đổi dữ liệu theo cách này tương đối rẻ. Và cuối cùng, lập trình hàm coi các hàm là công dân hạng nhất. Điều này có nghĩa là giống như chúng ta có thể gán các giá trị, chẳng hạn như số hoặc chuỗi, cho một biến, chúng ta cũng có thể gán hàm. Dưới con mắt của JavaScript, khai báo thứ ba ở đây hầu như không khác gì hai khai báo kia. Điều này có một số ý nghĩa quan trọng đối với cách chúng ta có thể tổ chức các chương trình của mình. Các hàm hạng nhất cung cấp cho chúng ta khả năng truyền các hàm làm đối số cho các hàm khác và trả về các hàm. Như chúng ta sẽ thấy sau, điều này có thể mang lại cho chương trình của chúng ta tính linh hoạt đáng kinh ngạc và cho phép chúng ta tăng đáng kể khả năng sử dụng lại mã, trong một số trường hợp

Lập trình chức năng trong lập trình là gì?

Lập trình hàm (FP) là một cách tiếp cận để phát triển phần mềm sử dụng các hàm thuần túy để tạo phần mềm có thể bảo trì . Nói cách khác, xây dựng chương trình bằng cách áp dụng và soạn các hàm.

JavaScript có chức năng hay mệnh lệnh không?

Lập trình khai báo vs mệnh lệnh . Đây là ý nghĩa của mọi người khi họ nói đó là ngôn ngữ đa mô hình. Chỉ là mã chức năng tuân theo mô hình Khai báo

Tại sao JavaScript không phải là ngôn ngữ chức năng?

Không hỗ trợ tối ưu hóa lệnh gọi đuôi, khớp mẫu, cấu trúc dữ liệu bất biến và các yếu tố cơ bản khác của lập trình chức năng , JavaScript không phải là ngôn ngữ truyền thống được coi là ngôn ngữ chức năng thực sự.

JavaScript là loại lập trình gì?

JavaScript (JS) là ngôn ngữ lập trình nhẹ, được thông dịch hoặc được biên dịch kịp thời với các hàm hạng nhất . Mặc dù nó được biết đến nhiều nhất là ngôn ngữ kịch bản cho các trang Web, nhưng nhiều môi trường không có trình duyệt cũng sử dụng nó, chẳng hạn như Node. js, Apache CouchDB và Adobe Acrobat.