Callback - như một Hàm Gọi Hàm
Trong ngôn ngữ lập trình, callback (hàm gọi lại) là một hình thức của hàm gọi hàm. NgaNguyenDuy cũng đã đề cập đến callback trong diễn đàn này và có cho thí dụ về DOM. Ở đây mình chỉ lập lại với thí dụ khác và khai triển thêm theo chiều hướng node.js.
Thế nào là hàm gọi hàm? Quan sát một sự kiện thường sảy ra hằng ngày. Tôi nghe ông ta nói "chào cô", hay tôi nghe thủ phạm gào to "tao giết mày". Đại khái là như vậy, khuôn rập như tôi nghe ai đó nói "điền vào chỗ trống", hay theo ngôn ngữ lập trình tôi nghe(ai nói(câu gì đó)). Để mã ra cho dễ thấy:
function heSaid(word) {
console.log(word);
}
function iHear(someFunction, value) {
someFunction(value);
}
iHear(heSaid, "Hello");
Hàm iHear có hai parameters: một hàm nào đó và một giá trị. Hàm heSaid chỉ có một parameter. Khi run đoạn mã trên sẽ chạy ra chữ Hello. Để cho rõ ràng hơn mình chỉnh sửa output của heSaid chút đỉnh như sau:
function heSaid(word) {
console.log(word);
}
function iHear(someFunction, value) {
someFunction('I hear he said: "' + value + '."');
}
iHear(heSaid, "Hello");
C:\nodeDev> node callback.js
I hear he said: "Hello."
Lẽ dĩ nhiên ta cũng thể viết lại hàm gọi như thế này iHear(heSaid, "I love you. I love you so much!");
Hoặc thay vì heSaid ta có thể có một hàm mới the KillerSaid:
function theKillerSaid(word) {
console.log(word);
}
function iHear(someFunction, value) {
someFunction('I hear he said: "' + value + '."');
}
iHear(theKillerSaid, "I will kill you");
Callback - như một Hàm Gọi Hàm - thí dụ thực tiễn
Sau đâ là một thí dụ thực tiễn hơn về Array để các bạn khảo sát nhé. Đoạn mã này thay đổi giá trị của một array sao cho những phần tử của array có giá trị ngược lại, dương qua âm hay âm qua dương.
function xulyArray(arr, callback) {
var resultArr = [];
for (var i = arr.length-1; i >= 0; i--)
resultArr[i] = callback(arr[i]);
return resultArr;
}
var arr = [1, 2, 3, 4];
var arrReturned = xulyArray(arr, function(arg) {return arg * -1;});
console.log(arrReturned);
C:\nodeDev> node callback.js
[ -1, -2, -3, -4 ]