ภาพหน้าปก: ตอนที่ 8: Functions 101 หัวใจของการจัดระเบียบโค้ด

1. 🎯 ตอนที่ 8: Functions 101 หัวใจของการจัดระเบียบโค้ด

สวัสดีครับน้องๆ นักพัฒนาทุกคน! ชงกาแฟมานั่งประจำสเตชันกันเหมือนเดิมนะครับ หลังจากที่เราได้ติดอาวุธเรื่องการวนลูป (Loops) กันไปแล้ว วันนี้พี่จะพาเข้าสู่เรื่องที่เป็น “หัวใจสำคัญ” และเป็นสิ่งที่ทำให้เราก้าวข้ามจากการเป็นแค่คนเขียนสคริปต์ (Scripter) ไปสู่การเป็นโปรแกรมเมอร์ (Programmer) อย่างเต็มตัว สิ่งนั้นก็คือ Functions (ฟังก์ชัน) ครับ

ในโลกของ JavaScript ฟังก์ชันไม่ได้เป็นแค่กล่องเก็บโค้ดธรรมดาๆ แต่มันเป็น “พลเมืองชั้นหนึ่ง” (First-class citizens) ที่มีพลังวิเศษมากมาย วันนี้เราจะมาปูพื้นฐานกันก่อนว่า ฟังก์ชันคืออะไร สร้างยังไง และมันช่วยกอบกู้ชีวิตโปรแกรมเมอร์อย่างเราได้ยังไงบ้าง!

2. 📖 เปิดฉาก (The Hook)

น้องๆ ลองจินตนาการสถานการณ์นี้ดูนะครับ สมมติว่าเรากำลังเขียนโปรแกรมคำนวณภาษีมูลค่าเพิ่ม (VAT) 7% ให้กับสินค้าในตะกร้า ถ้าเรามีสินค้า 1 ชิ้น เราก็เขียนสูตรคำนวณ 1 บรรทัด ถ้าเรามีสินค้า 10 ชิ้น เราก็อาจจะก๊อปปี้สูตรนั้นไปแปะ 10 บรรทัด (หรือใช้ลูปช่วย) แต่ถ้าเกิดระบบของเรามีหน้าจอให้คำนวณภาษีอยู่ 50 หน้าจอทั่วทั้งเว็บไซต์ล่ะ? การก๊อปปี้โค้ดสูตรคำนวณเดิมๆ ไปวางไว้ 50 ที่ ถือเป็นฝันร้ายชัดๆ! เพราะถ้าวันดีคืนดี รัฐบาลประกาศเปลี่ยนภาษีจาก 7% เป็น 10% เราต้องตามไปแก้โค้ดถึง 50 จุด… พลาดไปจุดเดียวคือพังทั้งระบบ

เพื่อแก้ปัญหานี้ ภาษาโปรแกรมมิ่งจึงสร้างสิ่งที่เรียกว่า Function ขึ้นมา เพื่อให้เราสามารถ “ห่อ” โค้ดที่ต้องใช้ซ้ำๆ เอาไว้ในกล่อง ตั้งชื่อให้มัน แล้วเรียกใช้งานกี่ครั้งก็ได้ตามต้องการ (Code on demand) เปลี่ยนโค้ดที่รกรุงรังให้กลายเป็นระเบียบ และเมื่อถึงเวลาต้องแก้ไข เราก็แค่มาแก้ที่กล่องนี้เพียงจุดเดียวครับ!

3. 🧠 แก่นวิชา (Core Concepts)

เราสามารถเปรียบเทียบ Function ให้เป็นเหมือน “เครื่องจักรในโรงงาน” ได้ครับ

  • เราส่ง “วัตถุดิบ” (Inputs) เข้าไปในเครื่องจักร
  • เครื่องจักรทำการ “ประมวลผล” (Processing) ตามคู่มือที่เราเขียนไว้
  • เครื่องจักรส่ง “สินค้าสำเร็จรูป” (Output) ออกมาให้เรานำไปใช้งานต่อ

ในการสร้างเครื่องจักรนี้แบบดั้งเดิม เราจะใช้สิ่งที่เรียกว่า Function Declaration (การประกาศฟังก์ชัน) ซึ่งประกอบไปด้วย 4 ส่วนหลักๆ:

  1. คีย์เวิร์ด function: เป็นการประกาศให้ JavaScript รู้ว่า “เฮ้ ฉันกำลังจะสร้างฟังก์ชันนะ”
  2. ชื่อฟังก์ชัน (Identifier): ชื่อที่เราตั้งให้เครื่องจักรนี้ (ควรตั้งเป็นคำกริยาที่บอกว่ามันทำหน้าที่อะไร เช่น calculateTax, getUserData)
  3. วงเล็บ (): พื้นที่สำหรับรับ “วัตถุดิบ” ซึ่งเราเรียกว่า Parameters
  4. ปีกกา { ... }: พื้นที่ “ตัวเครื่องจักร” หรือ Function Body ที่รวมคำสั่ง (Statements) ที่เราต้องการให้มันทำงาน

⚠️ ข้อควรระวัง: Parameters VS Arguments ต่างกันยังไง? หลายคนชอบเรียกสลับกัน พี่ขอเคลียร์ตรงนี้เลยครับ:

  • Parameters (พารามิเตอร์): คือ “ตัวแปร” ที่เราประกาศไว้ในวงเล็บตอนที่เรา สร้างฟังก์ชัน เพื่อรอรับค่า
  • Arguments (อาร์กิวเมนต์): คือ “ค่าข้อมูลจริงๆ” ที่เราส่งเข้าไปในวงเล็บตอนที่เรา เรียกใช้งาน (Invoke) ฟังก์ชันนั้นๆ
แผนภาพแสดงการรับ Arguments เข้าสู่ Parameters ประมวลผลใน Body และส่งค่า Return ออกมา

สินค้าสำเร็จรูป (Return Value) เมื่อเครื่องจักรทำงานเสร็จ เราสามารถส่งผลลัพธ์กลับออกมาให้ผู้เรียกใช้งานได้โดยใช้คีย์เวิร์ด return ทันทีที่ JavaScript เจอคำว่า return มันจะหยุดการทำงานของฟังก์ชันนั้นทันที แล้วโยนค่ากลับออกไป

4. 💻 ร่ายมนต์โค้ด (Show me the Code)

เรามาลองสร้างเครื่องจักรคำนวณพื้นที่สี่เหลี่ยมกันดูครับ:

// 1. การประกาศฟังก์ชัน (Function Declaration)
// width และ height ตรงนี้เรียกว่า "Parameters" (รอรับวัตถุดิบ)
function calculateArea(width, height) {
    let area = width * height; // ประมวลผล
    
    // คืนค่าผลลัพธ์กลับออกไป
    return area; 
    
    // โค้ดบรรทัดนี้จะไม่มีวันได้ทำงาน เพราะอยู่หลัง return!
    console.log("บรรทัดนี้จะถูกเมินครับ"); 
}

// 2. การเรียกใช้งานฟังก์ชัน (Invoking a function)
// ตัวเลข 5 และ 10 ตรงนี้เรียกว่า "Arguments" (วัตถุดิบของจริง)
let myRoomArea = calculateArea(5, 10); 

console.log("พื้นที่ห้องของฉันคือ: " + myRoomArea + " ตารางเมตร"); 
// ผลลัพธ์: พื้นที่ห้องของฉันคือ: 50 ตารางเมตร

หรือตัวอย่างฟังก์ชันแบบที่ “ไม่มีการ Return ค่า” (ทำแค่แสดงผล):

// ฟังก์ชันนี้รับพารามิเตอร์ชื่อ playerName
function greetPlayer(playerName) {
    console.log("ยินดีต้อนรับฮีโร่: " + playerName + " สู่โลก JavaScript!");
}

// เรียกใช้งานโดยส่งอาร์กิวเมนต์เข้าไป
greetPlayer("Wisit"); // ผลลัพธ์: ยินดีต้อนรับฮีโร่: Wisit สู่โลก JavaScript!

5. 🛡️ เคล็ดลับจากคัมภีร์ลับ (Under the Hood / Pro-Tips)

ในฐานะ Senior Dev พี่มีเรื่องที่เป็น “หลุมพราง” สำหรับมือใหม่มาเตือนกันครับ:

  1. 🚀 พลังวิเศษของการ Hoisting: ถ้าเราประกาศฟังก์ชันด้วยท่า Function Declaration (ใช้คำว่า function นำหน้า) JavaScript จะมีกลไกที่เรียกว่า “Hoisting” คือมันจะแอบยกการสร้างฟังก์ชันนี้ไปไว้บนสุดของไฟล์ให้เราอัตโนมัติก่อนที่โค้ดจะรัน นั่นหมายความว่า เราสามารถ “เรียกใช้” ฟังก์ชันนี้ได้ ตั้งแต่บรรทัดที่อยู่ “ก่อน” การประกาศฟังก์ชันครับ! (แต่ถ้าประกาศตัวแปร let หรือใช้ท่า Function Expression จะทำแบบนี้ไม่ได้นะ! ไว้เราจะคุยกันในตอนหน้า)
  2. 👻 อาถรรพ์ของค่า undefined:
    • ถ้าตอนเรียกฟังก์ชัน เราลืมส่ง Arguments เข้าไป (ส่งไปไม่ครบตามที่กำหนด) Parameters ตัวที่ว่างอยู่จะมีค่าเป็น undefined ทันที
    • ในทางกลับกัน ถ้าเราสร้างฟังก์ชันแล้ว “ลืมเขียนคำสั่ง return” เมื่อฟังก์ชันทำงานจบ มันก็จะแอบส่งค่า undefined กลับมาให้เราโดยอัตโนมัติเช่นกันครับ!,
  3. 🛑 กฎเหล็กของ return: จำไว้เสมอว่า คำสั่ง return คือ “ประตูทางออกฉุกเฉิน” ทันทีที่ระบบอ่านเจอคำว่า return มันจะกระโดดเด้งออกจากฟังก์ชันทันที (Exit immediately) โค้ดใดๆ ก็ตามที่อยู่ข้างล่าง return ในบล็อกนั้น จะไม่มีวันถูกอ่านเลย! เราจึงนิยมใช้เทคนิคดักจับ Error แล้ว return ออกไปก่อน (Early Exit) เพื่อให้โค้ดอ่านง่ายขึ้นครับ

6. 🏁 บทสรุป (To be continued…)

เห็นไหมครับว่า Functions เป็นเครื่องมือที่ทรงพลังมากๆ มันช่วยให้เรารวบรวมโค้ดให้เป็นหมวดหมู่ (Modular) ช่วยลดการเขียนโค้ดซ้ำซ้อน (Reusable) และช่วยให้โค้ดของเราอ่านง่ายเหมือนภาษาคนมากขึ้น

แต่ช้าก่อน… ท่าการสร้างฟังก์ชันที่เราเรียนกันในวันนี้ (Function Declaration) เป็นแค่ “ท่าพื้นฐาน” เท่านั้น ในโลกของ Modern JavaScript ฟังก์ชันสามารถแปลงร่างตัวเองไปอยู่ในตัวแปรได้ (Function Expression) หรือแม้กระทั่งเขียนย่อให้เหลือแค่บรรทัดเดียวโดยไม่ใช้คำว่า function เลยก็ได้ (Arrow Functions) รวมถึงการส่งฟังก์ชันเข้าไปในฟังก์ชันอีกที (Callback)!

เรื่องพวกนี้มันสนุกและท้าทายมากครับ เตรียมตัวให้พร้อม แล้วพบกันใหม่ในตอนต่อไป “อัปเกรดวิชาฟังก์ชันด้วย Function Expression และ Arrow Functions” ครับ!


ต้องการที่ปรึกษาและพัฒนาระบบ Automation หรือ Web Application ให้กับโรงงานของคุณ? ทีมงาน WP Solution พร้อมให้บริการออกแบบและติดตั้งระบบแบบครบวงจร ดูรายละเอียดบริการของเราได้ที่: www.wpsolution2017.com หรือพูดคุยปรึกษาเบื้องต้นได้ที่ Line: wisit.p