บทความ: ทำไมภาษา JavaScript ไม่ต้องมีหลักการแบบ Generics และการเปรียบเทียบกับ Java
สำหรับนักพัฒนาที่พึ่งเริ่มต้นเข้าสู่โลกแห่งการเขียนโปรแกรม หรือแม้กระทั่งนักพัฒนาที่มีประสบการณ์ คุณจะพบกับภาษาหลายแบบที่มีแนวคิดและสไตล์การเขียนที่แตกต่างกัน เมื่อพูดถึงภาษาโปรแกรมที่มีการใช้งานอย่างแพร่หลายอย่าง Java และ JavaScript ทั้งสองภาษานี้มีความแตกต่างกันมากในหลายๆ ด้าน รวมถึงหลักการแบบ Generics ที่ปรากฎใน Java แต่ไม่ปรากฎใน JavaScript บทความนี้จะสำรวจถึงเหตุผลที่ JavaScript ไม่มีหลักการ Generics และยกตัวอย่างความแตกต่างจากการใช้งานใน Java
ก่อนอื่นเรามาทำความเข้าใจภาษา Java และ JavaScript กันก่อน โดยถ้าหากเรามองผิวเผิน เราอาจคิดว่าทั้งสองภาษามีความเหมือนกัน แต่ความจริงแล้วมีความแตกต่างอย่างมากทีเดียว
Java เป็นภาษาที่มีการพัฒนาให้มีความแข็งแกร่ง (strongly-typed) ซึ่งหมายความว่าโค้ดที่เขียนต้องระบุประเภทของตัวแปรอย่างชัดเจน และครอบคลุมในเรื่องของ OOP (Object-Oriented Programming) อย่างเต็มรูปแบบ นอกจากนี้ Java ยังรองรับหลักการ Generics ซึ่งเป็นเครื่องมือที่ช่วยให้สามารถนำเอาชนิดข้อมูล (data types) เข้ามาใช้ในการตั้งโครงสร้างโปรแกรมแบบยืดหยุ่นได้มากขึ้น
ในทางตรงกันข้าม, JavaScript เป็นภาษาที่เน้นไปที่การเขียนโปรแกรมแบบโพรทอไทป์ (prototype-based) และเป็นภาษาที่มีการพัฒนาให้เป็นไดนามิก (dynamically-typed) ซึ่งหมายความว่าไม่ต้องประกาศประเภทตัวแปรแบบกำหนดเจาะจงเหมือนในภาษา Java
เหตุผลหนึ่งที่ JavaScript ไม่มี Generics คือ ธรรมชาติของภาษาที่เป็นไดนามิก ทำให้ JavaScript สามารถรับและประมวลผลประเภทข้อมูลที่แตกต่างกันได้อย่างง่ายดาย โดยที่โค้ดที่เขียนไม่ต้องมีการกำหนดประเภทข้อมูลเช่นเดียวกับภาษาที่ออกแบบมาให้เป็นแบบ Generics
ตัวอย่างเช่น ในภาษา Java เราอาจมีโค้ดส่วนนี้เพื่อกำหนดพื้นที่ของไอเทมทั่วไปในรายการ:
ArrayList stringList = new ArrayList();
stringList.add("Hello");
stringList.add("World");
หากเราพยายามเพิ่มข้อมูลที่ไม่ใช่ String เข้าไปใน `stringList`, เช่น Integer, เราจะพบกับข้อผิดพลาดในการคอมไพล์ เพราะภาษา Java มีการตรวจสอบประเภทข้อมูลในระหว่างการคอมไพล์ (compile-time type checking).
อย่างไรก็ตามใน JavaScript, เราสามารถทำแบบเดียวกันโดยไม่ต้องกำหนดประเภทของข้อมูลที่อาจมีความซับซ้อนได้:
let itemList = [];
itemList.push("Hello");
itemList.push("World");
itemList.push(100); // No error, JavaScript is dynamically-typed
JavaScript อนุญาตให้เราผสมประเภทข้อมูลต่างๆ ในอาร์เรย์เดียวกันได้อย่างอิสระ ซึ่งแสดงให้เห็นว่า Generics ไม่จำเป็นสำหรับภาษาที่มีความยืดหยุ่นสูงในการจัดการประเภทข้อมูลเช่น JavaScript
ใน Java, Generics เป็นเครื่องมือที่มีประโยชน์มากในการเขียนโค้ดที่มีความคุ้นเคยและปลอดภัยสำหรับการจัดการกับชนิดข้อมูลหลายๆ รูปแบบ ด้วย Generics เราสามารถกำหนดพารามิเตอร์ของประเภทข้อมูลไว้ล่วงหน้าและนำไปใช้กับคลาส, อินเทอร์เฟซหรือวิธีการต่างๆ ได้
ตัวอย่างการใช้ Generics ใน Java:
class Box {
private T t;
public void set(T t) {
this.t = t;
}
public T get() {
return t;
}
}
public class TestBox {
public static void main(String[] args) {
Box integerBox = new Box();
integerBox.set(new Integer(10));
Integer someInteger = integerBox.get();
// We can't accidentally add a String into a box of Integer
Box stringBox = new Box();
stringBox.set(new String("Hello Generics"));
String someString = stringBox.get();
}
}
จากตัวอย่างนี้ Generics ช่วยให้เราสามารถสร้างอินสแตนซ์ของคลาส Box ซึ่งสามารถจัดการกับประเภทข้อมูลที่เฉพาะเจาะจงได้ (เช่น Integer หรือ String) โดยที่ไม่ต้องเขียนโค้ดสำหรับแต่ละประเภทข้อมูลซ้ำๆ
JavaScript ถูกออกแบบมาเพื่อมีความยืดหยุ่น และได้รับการออกแบบให้สามารถใช้งานได้กับโค้ดที่มีความเปลี่ยนแปลงได้มาก ทำให้ไม่ต้องมีความซับซ้อนเพิ่มเติมอย่าง Generics ที่เห็นในภาษาอื่นๆ อย่าง Java สำหรับผู้ที่ต้องการลองสัมผัสและเรียนรู้เพิ่มเติมเกี่ยวกับการเขียนโปรแกรม ไม่ว่าจะเป็นแบบฝึกหัด กรณีศึกษา หรือการพัฒนาซอฟต์แวร์จริง Expert-Programming-Tutor (EPT) พร้อมที่จะเป็นผู้ชี้แนะและเปิดประสบการณ์ในการเขียนโปรแกรมให้กับทุกคนที่สนใจอย่างครบวงจรและลึกซึ้ง หากคุณต้องการอัพเกรดทักษะการเขียนโปรแกรมของคุณ อย่าลืมเข้ามาเรียนรู้และพัฒนาทักษะกับเราที่ EPT ที่ไหนที่คุณจะหาพื้นที่ในการสร้างสรรค์และเรียนรู้ได้อย่างเต็มที่อย่างนี้!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
หากเจอข้อผิดพลาด หรือต้องการพูดคุย ติดต่อได้ที่ https://m.me/expert.Programming.Tutor/
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM