HomeLập trìnhJavaScriptCách thức và...

Cách thức và lý do sử dụng Lập trình chức năng trong JavaScript hiện đại


bởi PALAKOLLU SRI MANIKANTA

Trong bài viết này, bạn sẽ hiểu sâu về lập trình hàm và lợi ích của nó.

Giới thiệu về lập trình chức năng

Lập trình chức năng (FP) là một loại mô hình hoặc mô hình trong khoa học máy tính. Mọi thứ được thực hiện với sự trợ giúp của các chức năng trong FP và các khối xây dựng cơ bản chỉ là các chức năng.

Các ngôn ngữ lập trình hỗ trợ lập trình chức năng thuần túy là —

  1. Haskell
  2. Khép kín
  3. Scala
  4. SQL

Một số ngôn ngữ lập trình hỗ trợ lập trình chức năng cũng như các mô hình lập trình khác là –

  1. con trăn
  2. Javascript
  3. C++
  4. hồng ngọc

Kể từ khi cái tên nói chức năng, hầu hết các lập trình viên nghĩ về các chức năng toán học. Đó không phải là trường hợp của FP. Nó chỉ là một sự trừu tượng để giải quyết các vấn đề phức tạp trong thế giới thực một cách dễ dàng và hiệu quả.

Trước Kỷ nguyên lập trình hướng đối tượng, ngành công nghiệp phần mềm hoàn toàn phụ thuộc vào lập trình chức năng. Mô hình này đã làm rung chuyển ngành công nghiệp phần mềm trong vài thập kỷ. Có một số vấn đề với lập trình chức năng và đó là lý do tại sao họ chuyển sang mô hình Hướng đối tượng. Các vấn đề với FP sẽ được thảo luận sau trong bài viết này.

Đó là tất cả những gì giới thiệu về Lập trình hàm. Bây giờ, trước hết, chúng ta cần tìm hiểu hàm là gì.

Chức năng

Trước khi tiết lộ định nghĩa thực tế, tôi muốn giải thích một tình huống để biết nơi thực sự sử dụng FP. Giả sử bạn đang viết mã để xây dựng một ứng dụng. Trong hành trình phát triển của mình, bạn muốn sử dụng lại mã của một vài dòng (100) ở những nơi khác nhau. Đối với Ứng dụng của bạn, các chức năng rất hữu ích. Chúng ta có thể viết các hàm tại một nơi và chúng ta sẽ có thể truy cập các hàm đó từ bất kỳ đâu trong chương trình. Lập trình chức năng có các tính năng sau –

  1. Giảm dự phòng mã.
  2. Cải thiện tính mô đun.
  3. Giúp chúng ta giải quyết các vấn đề phức tạp.
  4. Tăng khả năng bảo trì.

Hãy xem định nghĩa thực sự của một hàm:

Hàm là một khối mã được chỉ định được sử dụng để thực hiện một tác vụ cụ thể trong chương trình.

Các loại chức năng phổ biến nhất là –

  1. Chức năng chung
  2. Hàm mũi tên
  3. Hàm ẩn danh

Chức năng chung

Các hàm chung không là gì ngoài các hàm thường được lập trình viên sử dụng để thực hiện một tác vụ cụ thể. Cú pháp khai báo hàm tổng quát trong Javascript là:

function functionName(parameters) {  // code to be executed}

chức năng – Nó là một từ khóa cần thiết để khai báo một hàm.

Tên chức năng – Nó có thể được đặt tên dựa trên chức năng làm việc.

thông số – Chúng ta có thể truyền bất kỳ số lượng tham số nào cho một hàm.

Các chức năng được khai báo không được thực thi ngay lập tức. Chúng được “lưu để sử dụng sau”, và sẽ được thực thi sau đó, khi chúng được gọi (được gọi).

Chúng ta cần gọi hàm khi chúng ta muốn thực thi đoạn mã được trả về trong một hàm.

Đọc thêm  Lời hứa là gì? Lời hứa JavaScript cho người mới bắt đầu

Các chức năng chung được phân loại như sau –

Hàm không đối số

Chúng ta không cần truyền bất kỳ đối số nào cho hàm.

// Function Declaration
function sayHello(){   alert('Hello...!');}
// Calling the functionsayHello()

Khi chúng ta gọi hàm sayHello() nó sẽ tạo ra thông báo cảnh báo là Hello.

Hàm đối số

Trong loại hàm này, chúng ta sẽ truyền đối số cho chúng.

Ví dụ

// Declaring a Function
function add(num1, num2){   return num1 + num2;}
// Function Call
var result = add(7, 11);
console.log(result);

Các đối số được truyền trong khi khai báo hàm tức là (num1, num2) được gọi là Tham số hình thức.

Các đối số được truyền trong khi gọi một hàm tức là (7, 11) được gọi là Thông số thực tế.

Một Hàm thường trả về một số giá trị và để trả về giá trị đó chúng ta cần sử dụng trở lại từ khóa. Khi một hàm trả về một số giá trị, điều đó có nghĩa là nó không in bất kỳ đầu ra nào cho chúng ta, nó chỉ trả về đầu ra cuối cùng. Chúng tôi có trách nhiệm in kết quả đó. Trong chương trình trên, hàm trả về giá trị và tôi chuyển giá trị đó cho một tên biến ‘kết quả’. Lúc này hàm sẽ chuyển kết quả vào biến ‘kết quả’.

Chuyên môn của Hàm Javascript

Nếu bạn truyền nhiều đối số hơn số lượng đã khai báo thì bạn sẽ không gặp bất kỳ lỗi nào. Nhưng với các ngôn ngữ lập trình khác như Python, C, C++, Java, v.v… chúng ta sẽ gặp lỗi. Javascript sẽ xem xét dựa trên yêu cầu của họ.

Ví dụ

// Calling the function with more number of arguments than the declared number
var result1 = add(2, 4, 6);console.log(result1);
var result2 = add(2);console.log(result2);

đầu ra

ucOi2Z4tT9lDi5N0PgIHbaJ2NfDSuNIJVBSE
Đầu ra và Thực thi chương trình trên trong bảng điều khiển Javascript của chrome.

Nếu bạn truyền ít đối số hơn số đã khai báo thì chúng ta cũng sẽ không gặp lỗi. Nhưng chúng tôi không thể dự đoán đầu ra cho chương trình vì dựa trên chức năng chức năng của bạn, đầu ra sẽ được tạo ra.

Hàm đối số biến

Ưu điểm lớn nhất của các hàm Javascript là chúng ta có thể chuyển bất kỳ số lượng đối số nào cho hàm. Tính năng này giúp các nhà phát triển làm việc hiệu quả hơn một cách nhất quán.

Ví dụ

// Creating a function to calculate sum of all argument numbers
function sumAll(){
let sum = 0;
for(let i=0;i<arguments.length;i++){      sum = sum + arguments[i];}
return sum;
}
// Calling the sumAll function
sumAll();
sumAll(1,2,3,12,134,3234,4233,12,3243);

đầu ra

eDW47gBu-rgnJm0QmZ9ZSNp14AUPkvNa4ngl
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Đây là tất cả về các chức năng chung được sử dụng để thực hiện tác vụ phức tạp của chúng ta một cách đơn giản. Bây giờ hãy thảo luận về một số chức năng nâng cao được giới thiệu trong ES6 được gọi là Hàm mũi tên.

Hàm mũi tên

Một biểu thức hàm mũi tên là một thay thế nhỏ gọn về mặt cú pháp cho một biểu thức hàm thông thường. Nó không có ràng buộc riêng với cái này, siêu, tranh luận hoặc mới.mục tiêu từ khóa. Các biểu thức hàm mũi tên không phù hợp làm phương thức. Chúng không thể được sử dụng làm hàm tạo.

Một trong những tính năng được yêu thích nhất trong Es6 là chức năng Mũi tên. Chức năng mũi tên này giúp các nhà phát triển thời gian và đơn giản hóa phạm vi chức năng.

Cú pháp của hàm mũi tên là:

const functionName = (parameters) => {  // code to be executed}
           (OR)
var functionName = (parameters) => {  // code to be executed}
           (OR)
let functionName = (parameters) => {  // code to be executed}

Ví dụ cho các hàm mũi tên

Ví dụ 1

Đọc thêm  Hàm gọi lại trong JavaScript là gì? Hướng dẫn ví dụ về cuộc gọi lại JS

Tạo chức năng Mũi tên để nói thông báo chào mừng tới người dùng.

// Creating a Welcome function
let sayHello = () => {   return 'Welcome to Javascript World...!';}
// Calling the function
console.log(sayHello())

đầu ra

-1hdRxk3qIX0X72UJBI1q1osAgnaMi4VZvQs
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

ví dụ 2

Trong ví dụ này, chúng tôi đang tạo một hàm Mũi tên để tạo ra số lớn nhất trong số tất cả các số được truyền dưới dạng đối số.

let maxNumber = (a,b,c,d) => {
   if(a > b && a > c && a > d)       return a;   else if(b > a && b > c && b>d)       return b;   else if(c > a && c > b && c > d)       return c;   else       return d;}
// Calling the function
console.log(maxNumber(1,2,4,3));

Đầu ra:

3t84j6xz-SQsRP9s1QoahCDkob9ppNniDtJo
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Kết hợp các đối số biến với các hàm mũi tên

Vì chúng ta đang làm việc với hàm mũi tên nên nó không hỗ trợ mảng đối số theo mặc định như hàm tổng quát. Chúng tôi có trách nhiệm tuyên bố rõ ràng rằng nó hỗ trợ số lượng đối số thay đổi

ví dụ 3

let varArgSum = (...args) => {   let sum = 0;
 for(let i=0;i<args.length;i++){      sum = sum + args[i];}
return sum;
}
// Calling the Function
console.log(varArgSum());
console.log(varArgSum(1,2,3,4,5,6,7,8,9,10));

đầu ra

ckNYIRsu7dpCk6iBb26AuqZMGYpa9DePLxSl
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Đây là cách chúng ta có thể kết hợp một số lượng đối số khác nhau với các hàm mũi tên. Bây giờ hãy thảo luận về Hàm ẩn danh trong JavaScript.

Hàm ẩn danh

Một chức năng ẩn danh chỉ đơn giản là một chức năng không có tên. Mục đích của việc sử dụng hàm ẩn danh là để thực hiện một tác vụ nào đó và tác vụ đó không cần lập trình nữa. Nói chung, các chức năng ẩn danh được khai báo động trong thời gian chạy.

Các hàm ẩn danh chỉ được gọi một lần trong một chương trình.

Ví dụ:

// Working with an Anonymous function
var a = 10;  // Global Scope Variable.
// creating a function(function() {
  console.log("welcome to the world of Anonymous function");
  var b = 20;  // b is a local scope variable.
  var c = a+b; // c is a local scope variable    //a can be used because it is in the global scope
  console.log("Addition of two numbers value is: "+c);})();

đầu ra

mgfAMM-0fwKX62MXgUouc2Bt--zpNHAlaiJh
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Đây là khái niệm về các chức năng ẩn danh. Tôi nghĩ rằng tôi đã giải thích nó một cách đơn giản và dễ dàng.

Hàm bậc cao hơn

Hàm bậc cao hơn là một hàm nhận các hàm làm đối số hoặc kết quả là trả về một hàm khác.

Ví dụ tốt nhất về các hàm bậc cao hơn trong Javascript là Array.map(), Array.reduce(), Array.filter().

Ví dụ 1: Array.map()

// working with Array.map()
let myNumberArray = [4,9,16,25,36,49];
let mySquareRootArray = myNumberArray.map(Math.sqrt);
console.log(mySquareRootArray);

đầu ra

KPgAtGbvzMd4ZEiHjTXcwzMH4Lo5xfLXDVd1
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Ví dụ 2: Array.reduce()

// working with Array.reduce()
let someRandomNumbers = [24,1,23,78,93,47,86];
function getSum(total, num){  return total + num;}
let newReducedResult = someRandomNumbers.reduce(getSum);
console.log(newReducedResult);

đầu ra

HnU0h9I7jXXzPkUsuClW6Pdajb47mUjK7PZz
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Ví dụ 3: Array.filter()

// Working with array filter
let ages = [12,24,43,57,18,90,43,36,92,11,3,4,8,9,9,15,16,14];
function rightToVote(age){   return age >= 18;}
let votersArray = ages.filter(rightToVote);
console.log(votersArray);

đầu ra

FPNv0puZjLOD1z0KapHXstBPF8iR1KmKkpN4
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

đệ quy

Đây là một trong những chủ đề chính trong lập trình chức năng. Quá trình trong đó một hàm gọi trực tiếp hoặc gián tiếp được gọi là hàm đệ quy. Khái niệm đệ quy này khá hữu ích trong việc giải các bài toán thuật toán như Tháp Hà Nội, Đặt hàng trước, Đặt hàng sau, Theo thứ tự và một số bài toán duyệt đồ thị.

Ví dụ

Hãy thảo luận về một ví dụ nổi tiếng: tìm giai thừa của một số bằng cách sử dụng đệ quy. Điều này có thể được thực hiện bằng cách gọi hàm trực tiếp từ chương trình nhiều lần. Logic của chương trình là

giai thừa(n) = giai thừa(n) * giai thừa(n – 1) * giai thừa(n – 2) * giai thừa(n – 3) * ….. * giai thừa(n – n);

// Finding the factorial of a number using Recursion
function factorial(num){  if(num == 0)        return 1;  else        return num * factorial(num - 1);
}
// calling the function
console.log(factorial(3));
console.log(factorial(7));
console.log(factorial(0));

đầu ra

Đọc thêm  Các mô-đun JavaScript – Được giải thích bằng các ví dụ
7YUVGyUrWQcqnG8dUZ5BnfbXmqT1SvzAyVeI
Phần Đầu ra và Thực thi của chương trình trên trong bảng điều khiển Javascript của chrome.

Đặc điểm của lập trình chức năng

Mục tiêu của bất kỳ ngôn ngữ FP nào là bắt chước việc sử dụng các khái niệm toán học. Tuy nhiên, quá trình tính toán cơ bản là khác nhau trong lập trình chức năng. Các đặc điểm chính của lập trình chức năng là:

Dữ liệu là bất biến: Dữ liệu hiện diện bên trong các chức năng là bất biến. Trong lập trình Hàm, chúng ta có thể dễ dàng tạo cấu trúc Dữ liệu mới nhưng không thể sửa đổi cấu trúc dữ liệu hiện có.

Khả năng bảo trì: Lập trình chức năng tạo ra khả năng bảo trì tuyệt vời cho các nhà phát triển và lập trình viên. Chúng ta không cần phải lo lắng về những thay đổi vô tình được thực hiện bên ngoài chức năng đã cho.

mô đun: Đây là một trong những đặc điểm quan trọng nhất của lập trình chức năng. Điều này giúp chúng tôi chia nhỏ một dự án lớn thành các mô-đun đơn giản hơn. Các mô-đun này có thể được kiểm tra riêng biệt giúp bạn giảm thời gian dành cho kiểm tra đơn vị và gỡ lỗi.

Ưu điểm của lập trình chức năng

  1. Nó giúp chúng ta giải quyết vấn đề hiệu quả một cách đơn giản hơn.
  2. Nó cải thiện tính mô đun.
  3. Nó cho phép chúng tôi triển khai phép tính lambda trong chương trình của mình để giải các bài toán phức tạp.
  4. Một số ngôn ngữ lập trình hỗ trợ các hàm lồng nhau giúp cải thiện khả năng bảo trì của mã.
  5. Nó làm giảm các vấn đề phức tạp thành các phần đơn giản.
  6. Nó cải thiện năng suất của nhà phát triển.
  7. Nó giúp chúng tôi gỡ lỗi mã một cách nhanh chóng.

Nhược điểm của lập trình chức năng

  1. Đối với người mới bắt đầu, nó là khó hiểu. Vì vậy, nó không phải là cách tiếp cận mô hình thân thiện với người mới bắt đầu cho các lập trình viên mới.
  2. Khó bảo trì trong giai đoạn mã hóa khi quy mô dự án lớn.
  3. Khả năng sử dụng lại trong lập trình Hàm là một nhiệm vụ khó khăn đối với các nhà phát triển.

Phần kết luận

Đối với một số người, nó có thể là một mô hình lập trình hoàn toàn mới. Tôi hy vọng bạn sẽ cho nó một cơ hội trong hành trình lập trình của mình. Tôi nghĩ bạn sẽ thấy chương trình của mình dễ đọc và gỡ lỗi hơn.

Khái niệm Lập trình hàm này có thể phức tạp và khó khăn đối với bạn. Ngay cả khi bạn là người mới bắt đầu, thì cuối cùng nó sẽ trở nên dễ dàng hơn. Sau đó, bạn có thể tận hưởng các tính năng của lập trình chức năng.

Nếu bạn thích bài viết này xin vui lòng chia sẻ với bạn bè của bạn.

Xin chào những người bận rộn, tôi hy vọng bạn đã vui vẻ khi đọc bài đăng này và tôi hy vọng bạn đã học được nhiều điều ở đây! Đây là nỗ lực của tôi để chia sẻ những gì tôi đang học.

Tôi hy vọng bạn thấy một cái gì đó hữu ích cho bạn ở đây. Và hẹn gặp lại các bạn lần sau!

Chúc vui vẻ! Tiếp tục học những điều mới và viết mã để giải quyết vấn đề.

kiểm tra của tôi TwitterGithub và Facebook.





Zik.vn – Biên dịch & Biên soạn Lại

spot_img

Create a website from scratch

Just drag and drop elements in a page to get started with Newspaper Theme.

Buy Now ⟶

Bài viết liên quang

DMCA.com Protection Status