[Dev] Callback โทรกลับหน่อยนะ (บน VB.NET)

หลังจากที่เขียนบทความเรื่อง Callback บน JavaScript ไปคราวก่อน ก็ได้เจองานที่เขียนเป็น Callback บน VB.NET ในวันนั้นเลย ก็เพิ่งจะได้มีโอกาสเขียนวันนี้เอง Baffle

Callback

มาดูกันเลยดีกว่า ว่าบน VB.NET จะเขียน Callback กันยังไง (ใครยังไม่เข้าใจว่า Callback คืออะไร อ่านตอนที่แล้วก่อนนะครับ) โดยในบทความตอนนี้ จะอ้างอิงกับ VB.NET ใน Version 2008 นะครับ

จากตอนที่แล้ว ขอยก Code ของ JavaScript จากตัวอย่างตอนที่แล้วมา เพื่อเขียน Code เทียบกัน

จาก Code ของ JavaScript หากเขียนบน VB.NET จะได้แบบนี้

ในบรรทัดที่ 1-9 ของ VB.NET เหมือนกับของ JavaScript ทุกประการ จะแตกต่างก็แค่ Type ของตัวแปร ที่ใช้เป็น Callback ในบรรทัดที่ 6 มี Parameter ชื่อ callback เป็นชนิด Action(Of String) Sad

Action(Of String) คือการบอกว่า Sub ที่จะกำหนดเข้ามาเป็น Callback นั้น จะต้องมี Parameter 1 ตัว เป็นชนิด String นั่นเอง (หากต้องการเป็น Function ให้เปลี่ยนจาก Action เป็น Func แทน)

ดูตัวอย่างการใช้งาน ในบรรทัดที่ 13 ต้องประกาศตัวแปรให้มีชนิดตรงกัน และการอ้างอิงถึงตัว Sub/Function ที่ต้องการ จะต้องระบุด้วยคำสั่ง AddressOf ดังตัวอย่างในบรรทัดที่ 14

และเรียกใช้งานในบรรทัดที่ 16 ซึ่งก็จะเหมือนกับ JavaScript บรรทัดที่ 11 นั่นเอง

สำหรับการเรียกใช้งาน สามารถเขียนย่อ ๆ ได้ ดังนี้

ซึ่งก็เท่ากับบรรทัดที่ 13-16 ในตัวอย่างแรกนั่นเอง

ทีนี้ หากว่าผู้พัฒนา Sub/Function ที่ต้องการให้มีการส่ง Callback มา โดยที่ผู้เรียกใช้งาน เป็นคนละคนกัน การกำหนดชนิดเป็น Action อาจทำให้เข้าใจยาก ใน VB.NET นั้น สามารถใช้ Delegate เข้ามาช่วย โดยสามารถปรับปรุง Code ใหม่ เป็นดังนี้

สังเกตุบรรทัดแรก จะมี Delegate ชื่อ delegateCallback ซึ่งต้องการ Parameter 1 ตัว ลักษณะของคำสั่ง คล้าย ๆ กับการประกาศ Sub/Function เพียงแต่ไม่มี Code ภายใน ทำให้ดูเหมือนเป็น Sub/Function ต้นแบบ ที่ไว้ให้ผู้ใช้งาน พัฒนา Sub/Function ที่มี Parameter และ Return type เหมือนกัน

สำหรับการเขียน Callback แบบไม่ระบุ Function ที่เขียน Code ใส่ไปใน Parameter แบบเดียวกับตัวอย่างสุดท้ายของ JavaScript นั้น ใน VB2008 ยังไม่สามารถทำได้นะครับ ต้องมีการประกาศ Function แล้วใช้ AddressOf อ้างอิงไปเท่านั้น แอบเสียใจเล็กน้อยที่ทำไม่ได้ Too Sad

ในตอนหน้า ใครอยากให้เขียนเกี่ยวกับเรื่องอะไร เสนอมาได้นะครับ บางทีมันคิดหัวข้อไม่ออกน่ะนะ I Surrender!

1 Comment


  1. คราวหน้าขอเป็นวิธีการเขียน Games บน แอนดรอย ด้วยนะครับ

    Reply

Leave a Reply

Your email address will not be published. Required fields are marked *