ตอนที่ 9: Arrow Functions การเขียนฟังก์ชันสไตล์ยุคใหม่

1. 🎯 ตอนที่ 9: Arrow Functions การเขียนฟังก์ชันสไตล์ยุคใหม่
สวัสดีครับน้องๆ นักพัฒนาทุกคน! ชงกาแฟแก้วโปรดแล้วมานั่งที่สเตชันกันครับ ในตอนที่แล้วเราได้รู้จักกับ “เครื่องจักร” ที่เรียกว่า Function กันไปแล้ว ซึ่งมันช่วยเราจัดระเบียบโค้ดได้ดีเยี่ยม แต่เชื่อมั้ยครับว่า บางครั้งการเขียนฟังก์ชันแบบดั้งเดิมก็ดูจะ “ยาวและเยิ่นเย้อ” เกินไปหน่อยสำหรับงานง่ายๆ
วันนี้พี่จะพาไปรู้จักกับเวทมนตร์บทใหม่ที่ถูกเพิ่มเข้ามาในมาตรฐาน ES6 (ปี 2015) นั่นก็คือ Arrow Functions อาวุธคู่กายของโปรแกรมเมอร์ยุคใหม่ ที่จะเปลี่ยนโค้ดยาวๆ ให้กลายเป็นโค้ดสั้นกระชับ อ่านง่ายสบายตา แถมยังช่วยแก้ปัญหาโลกแตกเรื่อง Context ของตัวแปร this ได้อย่างหมดจดครับ!
2. 📖 เปิดฉาก (The Hook)
น้องๆ ลองนึกภาพตามนะครับ สมมติว่าเรามีตะกร้าผลไม้ แล้วเราอยากจะ “แปะป้ายราคา” ให้ผลไม้ทุกชิ้น ใน JavaScript เรามักจะใช้ฟังก์ชันมาช่วยจัดการทีละชิ้น (เรียกว่า Callback function)
ถ้าเราเขียนแบบดั้งเดิม เราจะต้องพิมพ์คำว่า function พิมพ์วงเล็บ () พิมพ์ปีกกา {} พิมพ์คำว่า return… โห! กว่าจะได้ผลลัพธ์ โค้ดก็บวมไป 3-4 บรรทัดแล้วครับ แค่การกระทำง่ายๆ เหมือนกรอกเอกสาร 3 หน้าเพื่อขอซื้อลูกอม 1 เม็ด!
ด้วยความหงุดหงิดนี้เอง คณะกรรมการที่ออกแบบ JavaScript จึงได้หยิบยืมไอเดียมาจากภาษาอื่น (เช่น CoffeeScript) และสร้าง Arrow Function ขึ้นมา มันคือการ “ลดรูป” ไวยากรณ์ให้เหลือแต่แก่นที่จำเป็น ทำให้เราเขียนฟังก์ชันจบได้ในบรรทัดเดียว!
3. 🧠 แก่นวิชา (Core Concepts)
Arrow Function หรือที่ฝรั่งมักเรียกว่า “Fat Arrow” (=>) ไม่ใช่แค่การเปลี่ยนหน้าตาโค้ดให้สวยขึ้นเท่านั้น แต่มันมีกฎการ “ลดรูป” (Syntax Reduction) ที่ฉลาดมากๆ ดังนี้ครับ:
- บอกลาคำว่า
function: เราไม่จำเป็นต้องพิมพ์คำว่าfunctionอีกต่อไป แค่ใส่พารามิเตอร์แล้วตามด้วยลูกศร=>ก็พอ. - ละวงเล็บได้ (ถ้ามีแค่ 1 Parameter): ถ้าฟังก์ชันของเรามีตัวรับค่าเพียงตัวเดียว เราสามารถลบวงเล็บ
()ทิ้งไปได้เลย! (แต่ถ้าไม่มีพารามิเตอร์เลย หรือมีมากกว่า 1 ต้องใส่()ไว้นะครับ). - Implicit Return (ละคำว่า
returnและปีกกา{}): หากฟังก์ชันของเรามีการทำงานแค่ “บรรทัดเดียว” (Single expression) เราสามารถลบปีกกา{}และคำว่าreturnทิ้งได้เลย! ระบบจะรู้ทันทีว่าให้ส่งค่าผลลัพธ์ของบรรทัดนั้นกลับไป (Implicit return).

4. 💻 ร่ายมนต์โค้ด (Show me the Code)
เรามาดูการ “กลายร่าง” ของฟังก์ชันกันแบบ Step-by-Step เลยครับ:
// 🦕 1. แบบดั้งเดิม (Traditional Function Expression)
let doubleOld = function(num) {
return num * 2;
};
// 🦋 2. เปลี่ยนเป็น Arrow Function (ตัดคำว่า function ทิ้ง ใส่ =>)
let doubleArrow = (num) => {
return num * 2;
};
// 🚀 3. ลดรูปขั้นสุด (1 Parameter เอาวงเล็บออก + บรรทัดเดียวเอา return และ {} ออก)
let doubleUltra = num => num * 2;
console.log(doubleUltra(5)); // ได้ 10 เหมือนกันเป๊ะ! แต่งดงามกว่ามาก
// ----------------------------------------------------
// 🌟 ประโยชน์ที่แท้จริง: เมื่อนำไปใช้กับ Higher-Order Functions (เช่น map, filter)
const prices =;
// แบบเก่า: เยิ่นเย้อ
const taxOld = prices.map(function(price) {
return price * 1.07;
});
// แบบ Arrow: คลีนสุดๆ ประหยัดไปได้หลายบรรทัด!
const taxNew = prices.map(price => price * 1.07);
console.log(taxNew); //
5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)
แม้ Arrow Function จะดูน่าใช้ไปหมดทุกตรง แต่พี่ต้องเตือนน้องๆ ว่า “มันไม่ได้มาแทนที่ฟังก์ชันปกติ 100%” มันมีความแตกต่างเชิงลึก (Semantics) ที่ต้องระวังให้ดีครับ!
- ⚠️ 1. มันไม่มี
thisเป็นของตัวเอง (Lexical Scoping): ฟังก์ชันปกติจะมีค่าthisเปลี่ยนไปตามคนที่เรียกใช้งานมัน (Dynamic) แต่นี่คือฝันร้ายเวลาทำ Callback! ส่วน Arrow Function จะทำตัวเหมือนเด็กดี คือมันจะ “ไม่มีthisเป็นของตัวเอง” แต่มันจะมองออกไปข้างนอก แล้วยืมค่าthisจาก Scope ที่ห่อหุ้มมันอยู่มาใช้งานเสมอ (Lexicalthis). คุณสมบัตินี้ทำให้มันเกิดมาเพื่อเป็น Callback โดยเฉพาะครับ! - ⚠️ 2. ห้ามใช้เป็น Constructor (ห้ามใส่
new): ด้วยความที่มันเกิดมาเพื่อความเบาและเป็นแค่ผู้ประมวลผล มันจึงไม่มี property ที่ชื่อว่าprototypeและระบบจะไม่อนุญาตให้เราเอา Arrow function ไปสร้าง Object ด้วยคำสั่งnewเด็ดขาด (จะโดนด่าด้วยTypeErrorทันที). - ⚠️ 3. ไม่มีอาร์กิวเมนต์ลับ (
argumentsobject): ฟังก์ชันปกติจะมีตัวแปรวิเศษชื่อargumentsซ่อนอยู่ เพื่อดูว่ามีคนส่งค่าอะไรมาให้บ้าง แต่ Arrow Function จะไม่มีของเล่นชิ้นนี้นะครับ. Pro-Tip: ให้เลิกใช้argumentsแล้วหันไปใช้ท่า Rest Parameters (...args) แทนครับ ปลอดภัยและทันสมัยกว่าเยอะ!. - ⚠️ 4. ระวังการ Return Object Literal ลอยๆ:
ถ้าเกิดน้องๆ จะใช้ Implicit return แบบบรรทัดเดียว แต่ดันอยากคืนค่าเป็น Object
{}โปรแกรมจะสับสนระหว่าง “ปีกกาของ Object” กับ “ปีกกาของ Function Body”. วิธีแก้คือ ต้องเอาวงเล็บ()ไปครอบ Object นั้นไว้ครับ เช่นconst getObj = () => ({ name: "Wisit" });.
6. 🏁 บทสรุป (To be continued…)
Arrow Functions เป็นการอัปเกรดที่คุ้มค่ามากที่สุดตัวหนึ่งของ JavaScript ยุคใหม่ มันทำให้โค้ดของเราดูมีสไตล์แบบ Functional Programming มากขึ้น ลดทอนความรกของ Syntax และที่สำคัญที่สุดคือ ช่วยเราปิดประตูความสับสนเรื่องของ Context ของคำว่า this เวลาเราเขียน Event Listener หรือใช้ท่าพวก .map(), .filter() ได้อย่างเด็ดขาด
ในตอนหน้า พี่จะพาไปดูเครื่องมือที่ทำให้เราจัดการกับ Array ได้ดุจดั่งเทพเจ้า อย่าง 3 ทหารเสือ “Map, Filter, Reduce” ซึ่งพอเรามี Arrow Function อยู่ในมือแล้ว การเขียน 3 ตัวนี้จะสนุกเหมือนร่ายมนต์เลยล่ะครับ! เตรียมตัวให้พร้อม แล้วเจอกันครับ!
ต้องการที่ปรึกษาและพัฒนาระบบ Automation หรือ Web Application ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p