วันอาทิตย์ที่ 26 มิถุนายน พ.ศ. 2559

JavaScript Pattern : Constructor Pattern



จากตอนที่แล้ว ยังไม่ได้เขียนเรื่องของ JavaScript DataStructure ต่อเลยครับ ขอมาเขียนเรื่อง Pattern สลับกันไปก่อน

เรื่องแรกวันนี้เป็นเรื่อง Constructor Pattern ครับ ขออธิบายสั้นๆคร่าวๆให้รู้ Concept พอนะครับ ละเอียดกว่านั้นขอไม่พูดถึงก่อน

ใน Object-Oriented Programming Language แบบดั้งเดิมเลยนั้นจะมี Constructor เป็น Special Method ที่จะถูกใช้ในการ Initial Value ต่างๆให้กับ Object หรือ Instance ที่จะถูกสร้างขึ้นมาจาก Class แม่ (ถูก Allocated ลงไปที่ Memory) ใน JavaScript ก็เช่นกันครับ เพราะเกือบทุกอย่างเป็น Object และคนส่วนใหญ่ก็จะให้ความสนใจกับ Constructor ของ Object กัน โดยเราสามารถสร้าง Object ได้ 3 รูปแบบดังนี้

var newObject = {};
var newObject = Object.create(Object.prototype);
var newObject = new Object();


เราลองมาดู Basic Constructor แบบแรกกันครับ


จากโค้ดด้านบนนั้น toString() จะถูก redefined ใหม่ทุกครั้งที่สร้าง Object ตัวใหม่ขึ้น
จึงต้องปรับมาใช้ Pattern นี้ครับคือ Constructor with Prototype ตามรูปด้านล่าง


Function เกือบจะทั้งหมดใน JavaScript นั้นจะมี Object อยู่ตัวนึงครับ คือ "Prototype" object เมื่อเราเรียก JavaScript Constructor เพื่อจะสร้าง Object ใหม่นั้น Properties ทุกอย่างของ Prototype ของ Constructor จะติดไปที่ new Object ด้วย

วันจันทร์ที่ 29 กุมภาพันธ์ พ.ศ. 2559

JavaScript DataStructure & Algorithms : List ADT


ช่วงนี้กระแส Javascript ของปี 2016 มาแรงมากมาย คงจะมีหลายคนที่อยากจะฝึกเขียน Javascript แต่เริ่มต้นไม่ถูก จะฝึกเขียนโปรแกรม ก็ไม่รู้จะเริ่มฝึกจากเขียนอะไร ไม่รู้จะตั้งโจทย์อะไร หรือเขียนไปแล้วไม่รู้จะเอาไปใช้ประโยชน์อะไร นึกภาพไม่ออก

เอางี้ครับ คือการที่เราจะเขียนโปรแกรมภาษาใดภาษาหนึ่งได้อย่างลึกซึ้ง เราต้องรู้จัก Data Structure ของแต่ล่ะภาษากันก่อน และเรียนรู้การเขียน Algorithm ในภาษานั้นๆด้วย เพราะแต่ล่ะภาษาจะมีลักษณะเฉพาะของมันเอง ซึ่งเราควรจะเขียนให้คล่อง โดยใช้ Algoritm นี่แหละครับเป็นโจทย์ของเรา

วันนี้ฝากตัวอย่าง Class List ไว้ก่อน (มันเป็น Class แบบสมมตินะครับ ของจริงต้อง ECMAScript6)  เดี๋ยวจะมาอธิบายอีกทีว่ามันคืออะไร ทำงานยังไง
(ไม่ได้เขียนเรื่อง Javascript ไว้แต่แรก บังเอิญจะทำเป็นข้อมูลเก็บเอาไว้พอดี ไหนๆก็ไหนๆ เอามาลง Blog ซ่ะเลย ฮ่าๆๆ)