# การใช้งาน Sending Function as Variable ใน Node.js สำหรับมือใหม่
เพื่อนๆ ท่านใดที่เคยได้ยินคำว่า "First-class citizens" ในโลกของการเขียนโปรแกรมบ้าง? ใน Node.js, functions ถือเป็น first-class citizens นั่นคือสามารถส่งต่อ function เป็นตัวแปรและสามารถมอบหมายงานให้กับ function อื่นได้เหมือนกับ object ทั่วไป เรื่องนี้เป็นการเปิดโลกทัศน์ให้ผู้เขียนโปรแกรมสามารถสร้างระบบที่ยืดหยุ่นและมีการจัดการแบบ modular ได้ดียิ่งขึ้นค่ะ
เป็นอย่างไรกันบ้าง? เชื่อว่าหลายคนคงอยากรู้แล้วสินะว่าการส่ง function เป็นตัวแปรนั้นทำได้อย่างไร วันนี้เราจะมาศึกษากันค่ะ!
function greeting(name) {
console.log(`สวัสดีคุณ ${name}`);
}
function processUserInput(callback) {
const name = "แอปเปิ้ล";
callback(name);
}
processUserInput(greeting); // ผลลัพธ์: สวัสดีคุณแอปเปิ้ล
ในตัวอย่างข้างบนนี้ `greeting` คือ function ที่เราผ่านไปเป็นอาร์กิวเมนต์ให้กับ function `processUserInput` และเมื่อ function `processUserInput` ถูกเรียก มันจะเรียกใช้ callback ที่ได้รับมา นี่เป็นวิธีง่ายๆ ในการควบคุม flow ของโปรแกรม
function setupAlertTimeout() {
return function (message) {
setTimeout(() => console.log(message), 1000);
};
}
const showAlertAfterTimeout = setupAlertTimeout();
showAlertAfterTimeout('ข้อความนี้จะแสดงหลังจาก 1 วินาที'); // ข้อความนี้จะแสดงหลังจาก 1 วินาที
ในที่นี้ `setupAlertTimeout` คือ function ที่เมื่อเรียกจะส่งคืน function อีกอัน ซึ่งเราสามารถเก็บมันไว้ในตัวแปรอื่นเพื่อเรียกใช้งานได้ต่อไป เทคนิคนี้เรียกว่า Higher-Order Function (HOF) ซึ่งมักใช้ในการสร้าง dataflow ที่ควบคุมได้และ reusable.
const numbers = [1, 2, 3, 4, 5];
const squareNumbers = numbers.map(num => num ** 2);
console.log(squareNumbers); // [1, 4, 9, 16, 25]
Method `.map()` ของ Array ใน JavaScript สามารถรับค่า callback function เพื่อทำการตรวจสอบหรือแก้ไข elements ของ array. ในตัวอย่างนี้เรานำ function ที่ยกกำลังสองของแต่ละตัว number ใน array มาใช้.
Node.js มี framework ยอดนิยมอย่าง Express.js ที่ได้ใช้ concept ของการส่ง function เป็นตัวแปรไปใช้ในการจัดการกับ HTTP requests ที่เรียกว่า Middleware. ตัวอย่างเช่นการตรวจสอบการเข้าถึงสิทธิ์ (authentication) ในระบบ API.
const express = require('express');
const app = express();
function isAuth(req, res, next) {
const auth = req.headers.authorization;
if (auth) {
next();
} else {
res.status(401).send('ไม่ได้รับอนุญาต');
}
}
app.get('/secret', isAuth, (req, res) => {
res.send('ลับสุดยอด');
});
app.listen(3000, () => console.log('Server is running on port 3000'));
ในตัวอย่างนี้ `isAuth` คือ middleware ที่ตรวจสอบว่า request มี header การ authentication หรือไม่ หากไม่มีจะส่งคำขอค่าข้อผิดพลาด 401 กลับไป
จะเห็นได้ว่าการใช้งาน function ในลักษณะนี้สามารถทำให้โค้ดของเรามี structure ที่ดี, แยก concerns ออกจากกันได้ชัดเจน, และช่วยให้สามารถ reuse รวมถึงการทดสอบโค้ดได้ง่ายขึ้น
หากเพื่อนๆ อยากเรียนรู้การทำงานกับ Node.js และ Express.js อย่างเจาะลึก มาเรียนกับเราที่ EPT ที่นี่เรามีคอร์สเรียบร้อยที่จะช่วยให้คุณก้าวเข้าสู่โลกของการเขียนโปรแกรม Node.js อย่างมืออาชีพ สมัครเรียนได้เลยนะคะ!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: node.js function_as_variable first-class_citizens callback_function higher-order_function array_methods express.js middleware http_requests authentication middleware_function dataflow reusable_code modular_programming
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM
Copyright (c) 2013 expert-programming-tutor.com. All rights reserved. | 085-350-7540 | 084-88-00-255 | ntprintf@gmail.com