JavaScript ứng dụng một phần

Các hàm một phần cho phép lấy một hàm làm đối số và cùng với đó, nó cũng nhận các đối số của các loại khác. Sau đó, nó sử dụng một số đối số được truyền và trả về một hàm sẽ nhận các đối số còn lại. Hàm được trả về khi được gọi sẽ gọi hàm cha với đối số ban đầu và tập hợp riêng của nó

Sau đây là mã cho các hàm từng phần trong JavaScript −

Ví dụ

Bản thử trực tiếp





Document



Partial function in JavaScript

CLICK HERE

Click on the above button to see partial function invocation

đầu ra

Đoạn mã trên sẽ tạo ra đầu ra sau -

Khi nhấp vào nút 'BẤM VÀO ĐÂY' -

Các phần về cơ bản là các hàm trả về các hàm với một số đối số đã được xác định trước và cần một số đối số để hoàn thành. Giả sử bạn có một hàm với một số đối số được đặt, nhưng bạn không muốn đặt đi đặt lại phần lớn các đối số vì bạn cần nó nhiều lần

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# use the function repeatedly  
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];

Vì vậy, sẽ tốt hơn nếu xác định đối số "phần tử" và sử dụng hàm chỉ với đối số "nội dung" đã thay đổi. Vì vậy, chúng ta sẽ cần một "một phần" trong đó phần tử được đặt và hàm chỉ chờ một đối số được hoàn thành. Chúng ta sẽ tạo một Partial nơi hàm của chúng ta được trả về với một số đối số đã được đặt

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# create a new partial
# retuns our writeSomethingToDom[] function 
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];

# use the function repeatedly  
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];

Đó là một cách tiếp cận chức năng để sử dụng một chức năng nhiều lần, trong đó một tập hợp con của các đối số giống nhau. Bạn có thể sử dụng và thực hiện bao nhiêu đối số tùy thích trong bước đầu tiên và bước thứ hai. Một phần luôn chờ phần còn lại của các đối số được đưa ra. Tất cả những gì bạn cần là một chức năng trợ giúp như thế này

function createPartial[func /*, 0..n args */] {
	var args = Array.prototype.slice.call[arguments, 1];
	return function[] {
		var allArguments = args.concat[Array.prototype.slice.call[arguments]];
		return func.apply[this, allArguments];
	};
}

cảm ơn chủ đề stackoverflow này

Tôi bắt gặp mô hình này vì tôi thích sử dụng các lời hứa được xâu chuỗi trong "jQuery"/Javascript. Theo ý kiến ​​​​của tôi thì có thể đọc được, nhưng đôi khi bạn cần chuyển một số đối số và điều đó chỉ có thể thực hiện được nếu bạn sử dụng các hàm ẩn danh xấu xí. Nhìn vào ví dụ này

Trong bài viết này, chúng ta sẽ xem xét cách sử dụng một phần ứng dụng và thành phần của hàm với JavaScript

ứng dụng một phần

Ứng dụng một phần là nơi chúng ta chỉ áp dụng một số đối số được mong đợi trong một hàm

Ví dụ: nếu chúng ta có một hàm có 3 tham số

const add = [x, y, z] => x + y + z;

Sau đó, chúng ta có thể tạo một hàm có hàm

const add1 = [y, z] => add[1, y, z];
0 với các đối số được áp dụng một phần bằng cách viết

const add1 = [y, z] => add[1, y, z];

Sau đó, chúng ta có thể sử dụng nó bằng cách viết

const sum = add1[2, 3];

Và chúng tôi nhận được 6

Để khái quát hóa điều này, chúng ta có thể viết

________số 8

Chúng tôi tạo hàm

const add1 = [y, z] => add[1, y, z];
1 của riêng mình bằng cách trả về một hàm có chênh lệch
const add1 = [y, z] => add[1, y, z];
2 và
const add1 = [y, z] => add[1, y, z];
3 dưới dạng đối số vào hàm
const add1 = [y, z] => add[1, y, z];
4

Sau đó, chúng ta có thể sử dụng nó bằng cách viết

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# use the function repeatedly  
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
3

const add1 = [y, z] => add[1, y, z];
5 lại là 6

cà ri vs. ứng dụng một phần

Currying rất tốt bất cứ khi nào chúng ta cần chuyển đổi các hàm nhận nhiều đối số thành nhiều hàm nhận một đối số

Các tình huống mà chúng ta cần chuyển đổi một hàm nhận nhiều đối số thành hàm gọi lại cho

const add1 = [y, z] => add[1, y, z];
6 chỉ nhận một tham số là một ví dụ về điều đó

Ứng dụng một phần của hàm rất hữu ích cho bất kỳ tình huống nào mà chúng ta cần áp dụng một hoặc các đối số cho một hàm và trả về một hàm có các đối số được áp dụng

Thành phần

Thành phần là nơi chúng tôi xâu chuỗi nhiều lệnh gọi hàm để trả về kết quả mà chúng tôi muốn

Chúng ta có nhiều hàm thực hiện một việc và chúng ta kết hợp chúng thành một để có được kết quả như mong muốn

Chẳng hạn, chúng ta có thể soạn các phương thức mảng

const add1 = [y, z] => add[1, y, z];
6 và
const add1 = [y, z] => add[1, y, z];
8 bằng cách viết

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# use the function repeatedly  
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
8

const add1 = [y, z] => add[1, y, z];
9 là
const sum = add1[2, 3];
0

Chúng tôi gọi

const add1 = [y, z] => add[1, y, z];
8 để trả về một mảng chỉ có các số lẻ

Và sau đó chúng tôi gọi

const add1 = [y, z] => add[1, y, z];
6 để bình phương mỗi số lẻ

soạn hàm

Chúng ta có thể tổng quát hóa hàm soạn thảo bằng cách viết

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# create a new partial
# retuns our writeSomethingToDom[] function 
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];

# use the function repeatedly  
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];
3

Hàm của chúng tôi nhận 2 hàm làm tham số và sau đó chúng tôi trả về một hàm gọi lần lượt từng hàm

const sum = add1[2, 3];
3 được gọi trước, sau đó
const sum = add1[2, 3];
4 được gọi trên kết quả trả về của
const sum = add1[2, 3];
3

Sau đó, chúng ta có thể sử dụng nó bằng cách viết

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# create a new partial
# retuns our writeSomethingToDom[] function 
# but with the "element" argument already set.
var writeToParagraph = createPartial[ writeSomethingToDom, $["p"] ];

# use the function repeatedly  
writeToParagraph[ "Hallo" ];
writeToParagraph[ "Welt" ];
writeToParagraph[ "Hello" ];
7

Chúng tôi đã gọi

const sum = add1[2, 3];
6 với
const sum = add1[2, 3];
7 và
const sum = add1[2, 3];
8

const sum = add1[2, 3];
8 được gọi đầu tiên với
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
0 và sau đó
const sum = add1[2, 3];
7 được gọi trên kết quả trả về

Thì

const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
2 là 10

Soạn nhiều chức năng

Chúng ta có thể tạo một phiên bản chung của hàm

const sum = add1[2, 3];
6 bằng cách sử dụng phương thức mảng
const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
4

Ví dụ, chúng ta có thể viết

function createPartial[func /*, 0..n args */] {
	var args = Array.prototype.slice.call[arguments, 1];
	return function[] {
		var allArguments = args.concat[Array.prototype.slice.call[arguments]];
		return func.apply[this, allArguments];
	};
}
7

Chúng tôi đã tạo một hàm lấy một mảng hàm

const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
5 làm tham số

Sau đó, chúng ta trả về một hàm nhận một giá trị làm giá trị ban đầu và gọi

const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
4 trên đó để gọi từng hàm trong mảng với kết quả trả về

const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
7 là kết quả trả về từ việc gọi các chức năng cho đến nay và
const add1 = [y, z] => add[1, y, z];
4 là chức năng

Và sau đó chúng ta có thể sử dụng nó bằng cách viết

const add = [x, y, z] => x + y + z;
2

Chúng tôi chia chuỗi theo khoảng trắng bằng hàm

const partial = function[fn, ...partialArgs] {
let args = partialArgs;
return function[...fullArguments] {
return fn[...[...partialArgs, ...fullArguments]];
};
};
9

Và ta lấy được độ dài của mảng chuỗi đã chia bằng hàm

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# use the function repeatedly  
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
30

Và sau đó chúng tôi sử dụng

const sum = add1[2, 3];
6 để kết hợp chúng lại với nhau

Khi chúng ta gọi hàm được trả về bằng một chuỗi, chúng ta sẽ nhận được các từ số được phân tách bằng khoảng trắng

Vì vậy,

# my useless function to write something to the dom
function writeSomethingToDom[element, content]{
	element.append[content];
}

# use the function repeatedly  
writeSomethingToDom[ $["p"], "Hallo" ];
writeSomethingToDom[ $["p"], "Welt" ];
writeSomethingToDom[ $["p"], "Hello" ];
32 là 3

Ảnh của Finn Gerkens trên BaptKết luận

Chúng ta có thể áp dụng một phần và soạn các hàm bằng JavaScript

Ứng dụng một phần cho phép chúng ta gọi các hàm với một số đối số được áp dụng

Và thành phần cho phép chúng tôi gọi nhiều chức năng trong một chuỗi

Rất thích bài viết này?

Ứng dụng từng phần trong Javascript là gì?

Kỹ thuật này sửa nhiều đối số thành một hàm để tạo ra một hàm khác có đối số phụ . Vì vậy, nó liên kết các giá trị với một hoặc một số đối số khác trong khi chuỗi hàm tiến triển.

Ứng dụng từng phần trong lập trình là gì?

Trong khoa học máy tính, ứng dụng từng phần [hoặc ứng dụng chức năng từng phần] đề cập đến quá trình cố định một số đối số cho một hàm, tạo ra một hàm khác có mức độ nhỏ hơn. Given a function , we might fix [or 'bind'] the first argument, producing a function of type .

Sự khác biệt giữa cà ri và ứng dụng một phần là gì?

Câu trả lời đơn giản. Cà ri. Cho phép bạn gọi một hàm, chia nó thành nhiều lần gọi, cung cấp một đối số cho mỗi lần gọi. Ứng dụng một phần. Cho phép bạn gọi một hàm, chia nó thành nhiều lần gọi, cung cấp nhiều đối số cho mỗi lần gọi.

Tại sao sử dụng ứng dụng một phần?

Ứng dụng một phần cho phép chúng tôi sửa đối số của hàm . Điều này cho phép chúng tôi rút ra các chức năng mới, với hành vi cụ thể, từ các chức năng khác, tổng quát hơn. Currying biến một hàm chấp nhận nhiều đối số “tất cả cùng một lúc” thành một loạt các lệnh gọi hàm, mỗi lệnh chỉ liên quan đến một đối số tại một thời điểm.

Chủ Đề