JSFB
Callback Function
JavaScript function ဆိုတာ block code တစ်ခုဖြစ်ပြီးတော့ သူ့ကို ပြန်ခေါ် call တဲ့ အချိန်မှသာ executed ဖြစ်ပါတယ်။ ဘာကြောင့်လဲဆိုတော့ JavaScript functions တွေက first-class ojbects တွေဖြစ် လို့ပါ။ JavaScript မှာ functions တိုင်းက objects တွေပါပဲ။ functions တွေက objects တွေကို parameters တွေ အဖြစ်ယူနိုင်ပါတယ်။ ဒါကြောင့် function တစ်ခုကို အခြာ function ရဲ့parameter အဖြစ်ယူလို့ရပါတယ်။ နောက်ပြီး အဲ့ဒီ parameter အဖြစ်ယူထားသော function ကို ယူထားတဲ့ function အတွင်းမှာ ပြန်သုံးပါတယ်။ အဲ့ဒီလို funciton ကို parameter အဖြစ် ယူပြီးအတွင်းမှာ ပြန်သုံးပုံကိုကျတော့ callback လို့ ခေါ်ပါတယ်။ အဲ့ဒီလိုမျိုး function တစ်ခုက အခြား function တစ်ခုကို parmeter အဖြစ်ယူပြီး ၎င်း ထဲမှာ ပြန် call ခေါ်ပြီး သုံးတဲ့ function ကို callback function လို့ခေါ်ပါတယ်။ JvaScript libraries တွေ က ဒီ function ထဲမှာ function ကို parameter အဖြစ် ယူ ပုံ callback functions တွေ ကို အများဆုံး အသုံပြုပါတယ်။
ဥပမာ
function funOne(){
console.log(1);
}
function funTwo(){
console.log(2);
}
ဒီမှာဆိုရင် output က 1 ပြီး 2 ထွက်ပါလိမ့်မယ်။ ဘာကြောင့် လဲဆိုတော့ JavaScript က codes တွေကို top to down order အဖြစ် sequentially run လို့ပါ။ ဒါကြောင့် output က 1 ပြီးမှ 2 ရပါတယ်။ ဒါပေမဲ့ တစ်ခါတစ်လေမှာ ကျနော်တို့က sequentially မဟုတ်ပဲ code ကို အရင် run နှင့်စေချင်တာမျိုးတွေရှိပါတယ်။ ဒီမှာ ဆို funOne() ကသာ code တွေများလို့ ရုတ်တရက် မ run နိုင်တာမျိုးဆိုရင် funTwo() ကို အရင် run စေပြီး funOne() ကို သူ့ရဲ့လုပ်ဆောင်ချက်ပြီးမှ run စေချင်တာမျိုးတွေရှိပါတယ်။ ဥပမာ funOne() ထဲမှာ API request ပို့ပြီး response ကို စောင့်တာမျိုးပါ။
ဥပမာ
setTimeout(function funOne(){
console.log(1);
},2000);
Function funTwo(){
console.log(2);
}
ဒီမှာဆိုရင် output က 2 ပြီးမှ 2 seconds လောက် ကြာတဲ့အချိန်မှာ 1 ထွက်လာပါလိမ့်မယ်။ ဒီမှာဆိုရင် code ကို funOne() ပြီးမှာ funTwo() ကိုခေါ်ထားသော်လည်းပဲ အစဥ်တိုင်းမလုပ်ဘဲ 2 ပြီးမှ1 ကို output ထုတ်ပေးပါတယ်။ JavaScript က funOne() ရဲ့ response ကိုစောင့်မနေတော့ပဲ funTwo() ကို execute လုပ် လိုက်ပါတယ်။ ဒါကြောင့် callbackကို အခြား code တွေ execute ဖြစ်သွားသော်လည်း တစ်ချို့သော code တွေကို execute မဖြစ်ချင် သေးတဲ့အခါ အသုံးပြုကြပါတယ်။ နောက်ထပ် ဥပမာ တစ်ခုပြပါမယ်။
let message = function() {
console.log("This message is shown after 3 seconds");
}
setTimeout(message, 3000);
ဒီမှာဆိုရင် JavaScript ရဲ့ built-in method ဖြစ်တဲ့ setTimeout() ကိုသုံးထားပါတယ်။ ဒီ code ကို run လိုက်မယ်ဆိုရင် run ပြီးလို့ 3 seconds နေမှ message function အလုပ်လုပ်ပြီး output ထွက်လာမှာဖြစ်ပါတယ်။ တစ်နည်း အားဖြင့် တစ်ခုခုဖြစ်ပြီးလုပ်ပြီးမှ(ဒီမှာဆို 3 seconds ကြာပြီးမှ) message() function ကို call ခေါ်လိုက်ပါတယ်။ အလုပ်လုပ်ပါတယ်။ ဒီမှာmessage() fuction က callback ပုံ ဖြစ်ပါတယ်။
function first(x){
console.log(x);
}
function second(y,callback){
callback(y);
}
second(2,first);//2
ဒီ ဥပမာက ကျနော်တို့ အပေါ်မှာ အရင်ပြောခဲ့တဲ့ function တစ်ခုကို အခြား function ရဲ့ parameter တစ်ခုအဖြစ်ယူထားတဲ့ပုံစံဖြစ်ပါတယ်။ first() function က ရလာတဲ့ parameter x ကို output ပြန်ထုတ်ဖို့ဖြစ်ပါတယ်။ second() function ကတော့ parameters x နဲ့ callback ဆိုပြီးတော့ function ကို parameter အနေနဲ့ ယူထားပါတယ်။ နောက်ပြီး အဲ့ဒီ parameter အနေနဲ့ ယူထားတဲ့ function ကို အတွင်းထဲမှာ ပြန်သုံးထားပါတယ်။ ဒါကြောင့် argument အနေနဲ့ 2 နဲ့ first() function ကို ပေးလိုက်တဲ့အခါမှာ first() function က second() function ထဲမှာ executed ဖြစ်ပြီး argument အဖြစ်ရလာတဲ့ 2 ကို oputput ထုတ်ပေးလိုက်ပါတယ်။ ဒီမှာဆိုရင် first() function က callback funtion ဖြစ်ပါတယ်။ ဒီလိုမျိုးလဲသုံးလို့ရပါတယ်။
function second(x,callback){
callback(x);
}
second(2,function(x){
console.log(x);
});
ဒီမှာဆိုရင် output က 2 ရပါတယ်။ ဒီမှဆိုရင် anonymous function ကို callback function အနေနဲ့အသုံးပြုထားတာပါ။ anonymous function ကို argument အနေနဲ့ ထည့်ပေးလိုက်ပြီး သူက callback function ပုံစံနဲ့ အလုပ်လုပ်သွားပါတယ်။
function second(x,callback){
callback(x);
callback(x);
}
second(2,function(x){
console.log(x);
});
second() function ထဲမှာ ရှိတဲ့ callback function ကို ရိုးရိုး function အတိုင်း အကြိမ်ရေများစွာ မတူညီတဲ့ပုံစံအမျိုးမျိုးနဲ့ ပြန်ခေါ်သုံးလို့ရပါတယ်။
နောက်ပြီး callback function တစ်ခုထဲမဟုတ်ကိုထည့်ချင်သလောက် parameters အဖြစ်ထည့်လို့ရပါတယ်။
function second(x,y,callback1,callback2){
callback1(x);
callback2(y);
}
second(2,3,
function(x){console.log(x)},function(y){console.log(y)});
ဒီမှာဆိုရင် ကျနော်တို့က callback နှစ်ခုကို parameters အဖြစ်ယူထားပါတယ်။ ပထမ callback function က ပထဆုံး argument ကို parameter အဖြစ်လက်ခံပြီး console ထုတ်ပေးပါတယ်။ ဒုတိယ callback ဖြစ်တဲ့ callback2 ကတော့ second arugment ကို parameter အဖြစ်လက်ခံပြီး console ပြန်ထုတ်ပေးရပါတယ်။
အနီးစပ်ဆုံးပြောရရင် ကျနော်တို့ အသုံးပြုနေကျဖြစ်တဲ့ array method တွေ၊ တစ်စုံတစ်ခုကနေ request ပို့ပြီး response စောင့်တာမျိုးတွေမှာသုံးပါတယ်။ Node.js မှာ ဆိုရင် ရေးတဲ့ code တိုင်း ဥပမာ file accessလုပ်တာ၊ networks access လုပ်တာ၊ database request တောင်းတာ၊ API ကနေ datas ယူတဲ့နေရာမျိုးတွေမှာ callback function တွေကို အသုံးပြုကြပါတယ်။
Callback function example တစ်ခုကို arrow function ပုံစံနဲ့ရေးကြည့်ပေးခဲ့ပါအုံးဗျ။
No comments:
Post a Comment