Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

ความแตกต่างระหว่าง Procedural Knowledge และ Declarative Knowledge


Procedural Knowledge (ความรู้เชิงกระบวนการ)

Procedural Knowledge หรือ Imperative Knowledge คือ ความรู้ที่อธิบาย "วิธีทำ" (How to) เพื่อให้บรรลุเป้าหมายหนึ่งๆ โดยระบุลำดับขั้นตอนที่ชัดเจน

ตัวอย่างใน JavaScript: การคัดลอกอาร์เรย์แบบ Procedural

var a = [1, 2, 3, 4, 5];
var b = [];
for (var i = 0; i < a.length; i++) {
  b.push(a[i]);
}
console.log(b); // [1, 2, 3, 4, 5]

Declarative Knowledge (ความรู้เชิงประกาศ)

Declarative Knowledge หรือ Functional Knowledge คือ ความรู้ที่อธิบาย "ทำอะไร" (What to do) โดยระบุผลลัพธ์ที่ต้องการ ไม่ได้ระบุขั้นตอนการทำงานโดยละเอียด

ตัวอย่างใน JavaScript: การคัดลอกอาร์เรย์แบบ Declarative

var a = [1, 2, 3, 4, 5];
var b = a.map(function(number) {
  return number * 1;
});
console.log(b); // [1, 2, 3, 4, 5]

ตารางเปรียบเทียบ

ลำดับ หัวข้อ Procedural Knowledge Declarative Knowledge
1 ชื่อเรียกอื่น Imperative Knowledge Functional Knowledge
2 พื้นฐาน เน้น How to (วิธีทำ) เน้น What to (ผลลัพธ์ที่ต้องการ)
3 การสื่อสาร ยากต่อการสื่อสาร (รายละเอียดเยอะ) สื่อสารง่าย (ระดับสูง กระชับ)
4 การเน้น Process-oriented (เน้นกระบวนการ) Data-oriented (เน้นข้อมูล/ผลลัพธ์)
5 การตรวจสอบ (Validation) ยากกว่า (ต้องตรวจทุกขั้นตอน) ง่ายกว่า (ตรวจผลลัพธ์ได้โดยตรง)
6 การแก้บั๊ก (Debugging) ยากกว่า (ต้อง trace ทีละขั้น) ง่ายกว่า (โค้ดสั้น อ่านง่าย)

สรุปและข้อสังเกตเพิ่มเติม

  • ไม่ใช่เรื่องถูก/ผิด - ทั้งสองแบบมีประโยชน์ในบริบทที่ต่างกัน
  • Procedural เหมาะกับ: การควบคุมฮาร์ดแวร์, อัลกอริทึมซับซ้อน, embedded systems
  • Declarative เหมาะกับ: Business logic, UI rendering, Database queries (SQL), Functional programming
  • JavaScript รองรับทั้งสอง paradigm: for loop (procedural) vs map/filter/reduce (declarative)
  • สมัยใหม่ Trend ไปทาง Declarative มากขึ้น (React, Vue, SQL, GraphQL)

ตัวอย่างเพิ่มเติมในชีวิตจริง

สถานการณ์Procedural (How)Declarative (What)
ทำอาหารสูตรอาหารขั้นตอนละเอียดเมนูอาหารที่ต้องการ
ขับรถเลี้ยวซ้าย, เบรก, กดแคนไปถึงจุดหมายปลายทาง
SQLCursor, Loop, FetchSELECT * FROM users WHERE age > 18