รู้มั้ยว่าที่จริงๆแล้วพื้นฐานการเขียนโค้ดมีรูปแบบหลักๆอยู่นะ ซึ่งรูปแบบเหล่านี้ไม่ว่าจะเป็นการเขียนโค้ดสไตล์ไหนก็สามารถแบ่งได้เป็น 2 อย่าง นั่นคือ Imperative และ Declarative หลายๆคนก็อาจจะเคยได้ยินผ่านหูผ่านตาเวลาเสิร์ชหาข้อมูลในอินเทอร์เน็ตมาบ้าง แต่เคยนึกสงสัยมั้ยว่า 2 แบบนี้มันคืออะไร มันง่ายมากๆเลย ลองไปเริ่มจากนิยามสั้นๆกันก่อน
คำนิยามแบบสั้นๆ ง่ายๆ
Imperative – คือ “ทำยังไงให้ได้สิ่งนี้”
Declarative – คือ “ทำอะไร”
มันสั้นจริงๆใช่มั้ยล่ะ ถ้าลองกูเกิ้ลดูก็จะเจอคำตอบแบบนี้อยู่ทุกที่แน่นอน ซึ่งถ้าหากว่าอ่านนิยามสั้นๆแล้วยังไม่เข้าใจก็ไม่เป็นไร ลองมาดูตัวอย่างให้เห็นภาพกันก่อนดีกว่า จากตัวอย่างนี้เค้าอธิบายได้เห็นภาพมากๆ
สร้างบ้านแบบ Imperative
จากข้อก่อนหน้านี้ที่บอกว่า Imperative นั้นเกี่ยวกับว่ามันทำ “ยังไง” ถ้าเปรียบเทียบเป็นการสร้างบ้าน สิ่งที่เราต้องทำก็คือ
- สร้างฐานตอกเสาเข็ม
- ขึ้นโครงบ้าน
- ติดตั้งระบบน้ำ ไฟ
- สร้างกำแพง
- ตกแต่งให้เรียบร้อย
จะเห็นว่า Imperative เราจะต้องรู้ว่าสิ่งที่เราต้องการคือ “บ้าน” นั้นต้องทำ “ยังไง” และลงมือทำไปทีละขั้นตอนตั้งแต่ต้นจนจบ
สร้างบ้านแบบ Declarative
แบบ Declarative นี้ให้ความสำคัญแค่ว่าเราต้องการ “อะไร” ซึ่งในที่นี้ก็คือบ้าน สิ่งที่เราต้องทำในแบบ Declarative ก็คือ
- ไม่ต้องรู้ว่าบ้านสร้างยังไง รู้แค่ต้องการบ้านหลังใหญ่ๆ สองห้องนอน แปดห้องน้ำ หน้าบ้านติดรถไฟฟ้า หลังบ้านติดสนามบิน
หมดแล้วสำหรับการสร้างบ้านแบบ Declarative คือเราโฟกัสแค่ว่าเราต้องการ “อะไร” และรู้แค่ว่าต้องใส่ “input” ในรูปแบบของเงินเข้าไป แล้วก็จะได้บ้านในแบบที่ต้องการออกมา
มาลองดูโค้ดตัวอย่าง
ถ้าเราต้องการเขียนโค้ดเพื่อเช็คว่าเลขที่ต้องการอยู่ตำแหน่งที่เท่าไหร่ใน List
โค้ด Imperative
let numList = [1, 5, 6, 9]
let desiredNumber = 6
for (let i = 0; i < numList.length; i++) {
const num = numList[i]
if (num === desiredNumber) {
console.log(`Desired number is at index: ${i}`)
}
}
เราจะทำไปทีละขั้นตอนไล่ตั้งแต่ สร้าง for loop -> เอาตัวเลขมาทีละตัว -> เช็คว่าเลขนั้นคือตัวที่ต้องการรึเปล่า -> แสดงผลลัพธ์
โค้ด Declarative
let numList = [1, 5, 6, 9]
let desiredNumber = 6
let desiresNumberIndex = numList.indexOf(desiredNumber);
console.log(`Desired number is at index: ${desiresNumberIndex}`);
สิ่งที่เราต้องรู้และทำก็คือ รู้ว่าเราต้องการเลขอะไร และรู้ว่าถ้าโยนเข้าไปในคำสั่ง indexOf แล้วก็จะได้ผลลัพธ์ออกมาเป็น index ที่ต้องการ
สรุป
ในการเขียนโปรแกรมจริง ที่มีการทำงานต่างๆเฉพาะของแต่ละงาน โค้ดในโปรแกรมก็จะมีทั้งส่วนที่เป็น Imperative และ Declarative จากตัวอย่างการสร้างบ้านถ้าเราสร้างบ้านเอง เราก็จะต้องรู้ทุกขั้นตอนในการสร้างบ้านและสร้างตามขั้นตอนนั้น (Imperative) แต่ถ้าเราจ้างคนอื่นสร้างบ้าน (Declarative) เราก็ไม่จำเป็นต้องรู้ว่าบ้านสร้างยังไง แต่ว่าคนที่สร้างนั้นยังต้องสร้างบ้านตามขั้นตอนอยู่ (Imperative) หรือก็คือในส่วนที่เราใช้ Declarative ก็จะมีส่วนที่เป็น Imperative แฝงอยู่นั่นเอง
แฝงอยู่แบบนี้แหละ!
ขอบคุณข้อมูลดีๆจาก