Archive for the ‘Introduction’ Category

Object Oriented Programming with JavaScript I

Monday, August 17th, 2009

ช่วงนี้ได้ใช้ JavaScript แบบจริงๆ จังๆ กับเขาบ้าง เพราะต้องเอาไปต่อกับ REST ในหน้าเพจที่ทำแต่เห็นว่าบางอย่างมันต้องเขียนโค้ดแบบเดิมซ้ำไปซ้ำมาอยู่เรื่อยก็เลยเกิดความคิดไปหาวิธีใช้งานแบบ OOP สำหรับ JavaScript ซะหน่อยดีกว่า เคยอ่านผ่านๆ ตาหลายรอบแล้วเหมือนกันแต่ไม่ค่อยได้เอาจริงเอาจังกับมันซะเท่าไหร่ครับ ตอนนี้งาน JavaScript เข้าจังๆ ก็เลยมีเหตุจำเป็นให้ต้องลอง นอกจากนั้นก็เป็นข้อดีหลายอย่างของการเขียน OO ที่ผมชอบก็คือ Reusable, Inheritance และ Encapsulation แต่ต้องบอกก่อนว่าการเขียนโปรแกรมแบบนี้ไม่ใช่เรื่องแปลกอะไร เพราะมันก็ทำได้ตั้งนานแล้วครับ blog ตอนนี้ก็คงเป็นการเอามะพร้าวห้าวมาขายสวนอีกตามเคยครับ :)

ความจริง เท่าที่ได้อ่านวิธีการเขียนก็คงไม่ใช้ OOP เหมือน Java หรือ PHP เท่าไหร่ เพราะใช้วิธีการแปลกๆ ของ JavaScript มาช่วยแต่ถึงอย่างไรวิธีการนี้ก็ใช้แนวคิดของ OO มาช่วยพัฒนาเลยหยวนๆ ถือว่าเป็น OOP แล้วกันครับ :)

hello, world

...
<script type="text/javascript" charset="utf-8">
	function HelloWorld(msg) {
		var defaultMessage = "HELLO, WORLD!!!";
		this.message = msg || "สวัสดีชาวโลก";

		alert('Let me say');

		this.goodie = function(m) {
			m = m || "?";
			alert(m + " " + good());
		}

		var good = function(m) {
			return "good day";
		}
	}

	function sayHi(m) {
		var hi = new HelloWorld();
		hi.goodie(m);
		hi.goodie(hi.message);
		hi.goodie(hi.defaultMessage);
		hi.good("Goodbye");
	}
</script>

</head>

<body id="index" onload="sayHi('สวัสดี')">
...

ด้านบนก็เป็นตัวงอย่างของการเขียน JavaScript แบบ OO ครับ ในที่นี้ “HelloWorld” จะทำหน้าที่เป็นคลาสจะ ให้ function sayHi เรียกใช้งาน โดยที่แนบตัวแปร message ไปให้ด้วย ใน script นี้จะมี alert message ให้เราเห็นทั้งหมด 4 หน้าต่างครับ ตามนี้เลยครับ แต่ก่อนเริ่มอาจจะต้องอธิบายกันนิดหน่อยเพื่อว่าจะมีคนไม่รู้ เครื่องหมาย “||” นี้ผมไม่รู้ชื่อวิธีเรียกมันอย่างเป็นทางการนะครับ แต่วิธีการทำงานก็คือโปรแกรมจะเปรียบเทียบว่าตัวแปรที่อยู่ด้านซ้ายเป็นค่าว่าง (null) หรือเปล่าถ้าใช้จะนำค่าที่อยู่ด้านซ้ายมาให้โดยอัตโนมัติ

Constructor

Constructor

Constructor


เป็น Constructor ของคลาส HelloWorld คิดง่ายๆ ก็คือ ทุกอย่างที่ไม่ได้ครอบไว้ด้วย function จะเป็น Constructor ของคลาสทั้งหมด

Assign

Assign

Assign


ตัวอย่างของการส่งค่าให้กับฟังก์ชั่น goodie ที่เป็น method ที่อยู่ภายในคลาส HelloWorld

Public Access

Public Variable

Public Access


ตัวอย่างการเข้าถึง Public variable ของคลาส “HelloWorld” สังเกตุได้ที่ตัวแปร “message” ที่อยู่ภายในคลาส “HelloWorld” ด้านบนที่นำหน้าด้วย this มีค่าเหมือนกับการใส่ “public”

Private Access

Private Access

Private Access


เป็นการเข้าถึงตัวแปรที่เป็นระบุไว้ว่าเป็น private ผลที่ได้คือไม่สามารถเข้าถึงได้เห็นได้จากค่าทีไ่ด้ออกมาจะเป็น ‘?’

ส่วนหน้าต่างสุดท้ายจะไม่ปรากฎให้เห็นเนื่องจากฟังก์ชั่น ‘good’ ถูกระบุให้มีชนิดการเข้าถึงแบบ private

นอกจากนี้ยังเขียนให้คลาสสามารถสืบทอดคุณสมบัติกันได้เหมือนภาษา OOP ทั่วไป แต่ยังไงก็ขอติดไว้ตอนหน้าแล้วกันครับ

Live Demo

วิธีทำ “สารบัญ” สำหรับ Pages

Tuesday, August 4th, 2009

“สารบัญ” (Table of Contents – TOC) ถือได้ว่าเป็นอีกเรื่องหนึ่งทำให้ปวดหัวกันได้อีกเรื่องหนึ่ง ช่วงนี้ต้องมีเรื่องให้ทะเลาะกับพวก Word Processing บ่อยๆ ไอ้จะมานั่งจัดเลขหน้าที่ละหน้าก็เคยเจอประสบการณ์อันเลวร้ายช่วงมหาวิทยาลัยมาแล้ว เลยจำฝังใจครับ เลยลองไปหาข้อมูล ได้ความว่า Word Processing ที่เป็นที่รู้จักกันดี [MS Word, OO.o Writer และ Pages] สามารถสร้างสารบัญอัตโนมัติให้เราได้ทุกตัว ส่วนวันนี้จะมาแนะนำ Word Processing ที่อยู่บน OS X ที่ชื่อว่า Pages ครับ

Pages Inspector

Fig.1: Pages Inspector

อย่างแรกให้เปิดหน้าต่าง Inspector ขึ้นมาก่อนเพื่อกำหนดว่าเราจะเอารูปแบบ [Paragraph Style] มาสร้างเป็น สารบัญบ้าง จากรูปให้เลือก Document Inspector -> TOC จะเห็นว่ามี checkbox อยู่ 2 ฝั่งคือซ้าย และขวา ด้านซ้ายจะเป็นส่วนที่บอกว่าจะเอารูปแบบใดมาทำสารบัญ ส่วนด้านขวาจะบอกให้ Pages ใส่เลขหน้าด้วย

Chapter Style

Fig.2: Chapter Style

จากนั้นก็ลงมือเขียนกันเลยครับ โดยต้องจำไว้ว่าเราเลือก Paragraph Style แบบไหน ให้ไปโผล่ที่สารบัญบ้าง ก็ให้เลือกใช้ Paragraph Style ในกับข้อความที่ต้องการ ถ้ากลัวลืมก็เปิดหน้าต่าง Style Drawer เอาไว้ครับ [command + Shift + T]

Insert -> Table of Contents

Fig.3: Insert -> Table of Contents

จากนั้นให้ใส่หน้ากระดาษเปล่าๆ 1 หน้าครับ แล้วเลือกเมนู Insert -> Table of Contents จะได้หน้าสารบัญดังที่เห็นใน Fig. 4 ครับ เนื้อหาภายในจะปรับปรุงอัตโนมัติเมื่อเราเพิ่มหรือเปลี่ยนแปลงเนื้อหา แต่เราก็บังคับให้ Pages ปรับปรุงสารบัญได้โดยกดปุ่ม “Update Now” ใน Fig.1 ครับ

Fig.5: Table of Contents

Fig.4: Table of Contents

อย่างที่บอกครับ ว่า Word Processing ที่เรารู้จักกันสามารถทำ TOC ได้กันหมดแล้ว ศึกษาข้อมูลได้ตามลิงก์ด้านล่างครับ

Introduce to Google Maps :: เตรียมพร้อมก่อนลุย

Tuesday, May 26th, 2009

จาก blog ตอนที่แล้วพูดถึงวิธีเอา Google Maps มาใช้แบบง่ายๆ ให้เป็นเป็นตัวอย่างกันไปแล้ว ตอนนี้ก็อย่างที่ทิ้งท้ายไว้คราวก่อนที่ว่าจะเอาวิธิการกำหนดค่าต่างๆ เพื่อบอกให้กูเกิ้ลส่งข้อมูลที่พร้อมใช้งานให้เราได้มากที่สุด

หลังจากเราสมัครของ key เพื่อใช้ดึงข้อมูลจาก Google Maps เลื่อนลงมาด้านล่างจะเห็นตัวอย่างการดึงโค้ดไปใช้งาน ทั้ง JavaScript, Flash และ HTTP Services

<script src="http://maps.google.com/maps?file=api&amp;v=2&amp;sensor=true_or_false&amp;key=ABCDEF" type="text/javascript"></script>

วิธีเรียกใช้งานแบบ JavaScript โดยที่ ABCDEF คือ key ที่กูเกิ้ลให้มา

ถ้าลองเปรียบเทียบตัวอย่างด้านบน และตัวอย่างจาก blog ตอนที่แล้ว จะเห็นได้ว่าโค้ดที่กูเกิ้ลให้มา มี parameters ตัวหนึ่งที่ผมได้ตัดออกไป นั่นคือ sensor ที่จะเป็นพารามิเตอร์ที่บอกให้กูเกิ้ลตรวจสอบว่าเครื่อง Client ที่เรียกเข้ามามี อุปกรณ์ GPS ด้วยหรือไม่ ค่าที่เป็นไปได้คือ true และ false (เป็นค่า default) (more…)