Open thanhpt-25 opened 1 year ago
Higher-order function thỏa mãn 1 trong 2 điều kiện sau:
Tham số nhận vào là 1 function Output của chính nó là function khác Use-case:
Có rất nhiều use case cho higher-order, ta có thể nối nhiều hàm khác nhau "function chainling" để thực hiện 1 lần công việc mà rất nhiều dòng code mới có thể thực hiện Ta có tạo ra nhiều hàm chỉ dùng 1 lần với nội dung khác nhau mà không cần đến code nhiều dòng, tức là tối giản hóa việc code nhiều hàm lặp đi lặp lại. Cứ hiểu nó như 1 interface và mình đang implement nó để biến hóa nó đang thành nhiều thằng khác nhau. Sample (JS):
function logMessage(code){
if (code[0] == ["E"]){
//I love C pointer
//Ở đây ta sẽ trả về hàm error message với code và errorMsg
return errorMsg => console.log("Error code: %s - Error %s", code, errorMsg);
}
//This is also an example of why you shouldn't write too many if else, if only 2 outcomes are expected, write 1 if!
//I love C pointer
//Ở đây ta sẽ trả về hàm error message với code và errorMsg
return successMsg => console.log("Success code: %s - Success? %s", code, successMsg);
};
//Khởi tạo ra hàm error 1 chuyên dùng để log message với code là E101
let error1 = logMessage('E101');
//Khởi tạo ra hàm error 1 chuyên dùng để log message với code là E102
let success1= logMessage('S101');
error1('Error message 1');
error1('Error message 2 - completely different message');
//Mặc dù là cùng 1 hàm log message với cùng 1 code nhưng lại có thể có nhiều error message khác nhau, ta có thể viết 1 hàm riêng dài ngoằng
//và if else loằng ngoằng thì thay vì ta viết 1 hàm để nhận message code riêng cho thằng E101, về sau cần gì maintaince riêng cho thằng này thôi.
//Không thực tế lắm nhưng cũng tạm tạm =))
success1('Success message 1');
Ok! Tạm chấp nhận câu trả lời.
Higher-Order function là hàm nhận một hàm dưới dạng đối số hoặc trả về hàm dưới dạng đầu ra.
const sum = a => b => a + b;
console.log(sum(123)(456));
Higher-Order function có 3 trường hợp sử dụng:
document.getElementById('button').addEventListener('click', () => { alert('MEME BÌNH DƯƠNG'); })
$('button').click(function () { alert('thần sấm ĐA'); })
- Closure function là một function bên trong một function cha và khi gọi function cha sẽ trả về function con; function con có thể truy cập và thực thi các biến của function cha.
const numGenerator = () => { let num = 0; const addNum = () => ++num; return addNum; }
let numFunc = numGenerator();
console.log(numGenerator()()); console.log(numGenerator()()); console.log(numFunc()); console.log(numFunc()); console.log(numFunc());
- Currying function là những function liên tiếp có một tham số.
const numList = (limit) => (func) => { const list_num = []; for (let index = 0; index < limit; index++) { if (func(index)) { list_num.push(index); } } return list_num; }
console.log(numList(100)(limit => limit % 2 == 1)); console.log(numList(100)(limit => limit % 2 == 0));
Bài toán
Award