Categories
BYOB Programming

หลักการเขียนโปรแกรมใน BYOB ตอนที่ 2

ฟังก์ชัน square สามารถวาดรูปสี่เหลี่ยม 100 x 100 ได้ขนาดเดียวทุกคร้้งที่เรียกใช้ฟังก์ชันนี้ ซึ่งไม่ค่อยยืดหยุ่น ถ้าเราต้องการสี่เหลี่ยมขนาดอื่นละ ทำได้ไหม ตามหลักการแล้ว คือการทำ Generalization ให้กับฟังก์ชัน โดยการส่งผ่านข้อมูลให้กับฟังก์ชัน เพื่อให้ฟังก์ชั่นทำงานได้ยืดหยุ่นขึ้น ไม่เฉพาะเจาะจงอยู่กับการทำงานเพียงแบบเดียว (วาดรูปสี่เหลี่ยม 100 x 100) เช่น ถ้าต้องการวาดสี่เหลี่ยมขนาดอื่นๆ ทำได้ด้วยการให้ข้อมูลขนาด (size) ให้กับฟังก์ชัน square เพื่อให้ได้สี่เหลี่ยมตามขนาดที่ใส่เข้าไปในฟังก์ชัน square (size)

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

โดยสรุป ระดับของการทำ Generalization ให้กับฟังก์ชันต้องดูความเหมาะสม ฟังก์ชันที่ทำงานได้สารพัดอย่างย่อมมีความซับซ้อนตามไปด้วย

การใส่ข้อมูลให้กับฟังก์ชัน ทำให้หน้าตาของมัน (function interface) เปลี่ยนไป ฟังก์ชันด้านซ้ายคือ ฟังก์ชันวาดรูปสี่เหลี่ยมจัตุรัสได้หลายขนาด “square (size) steps” กับฟังก์ชันวาดรูปสี่เหลี่ยมผืนผ้าตามขนาดกว้าง x ยาว  “square (width) steps (height) steps” (ข้อมูลเข้าจะอยู่ในวงเล็บ) 2 ฟังก์ชันนี้มีหน้าตาไม่เหมือนกัน จำนวนข้อมูลเข้าไม่เท่ากัน การทำงานภายในฟังก์ชันก็ไม่เหมือนกัน แต่ยังมีหลักการทำงานคล้ายกันคือ วาดรูปสี่เหลี่ยม

โดยทั่วไป หน้าตาฟังก์ชันทำให้เรารู้คราวๆ ว่ามันสามารถทำอะไรได้บ้าง เริ่มจาก ชื่อของฟังก์ชัน square บ่งบอกว่าเกี่ยวกับสี่เหลี่ยมจัตุรัส เมื่อมีข้อมูล size พอเดาได้ว่าเกี่ยวกับขนาดหรือด้านของสี่เหลี่ยม ส่วน steps ไม่ใช่ข้อมูลเข้า เป็นเพียงข้อมูลเพิ่มเติม (ไม่มีก็ได้) บอกหน่วยของขนาด (ใช้ steps เพราะสี่เหลี่ยมเกิดจากการเดินของตัวละคร Alonzo) ส่วนอีกฟังก์ชันหนึ่ง ใช้ชื่อ square เหมือนกันแต่มีข้อมูลเข้าสองตัว width กับ height บอกขนาดกว้างกับยาวของสี่เหลี่ยมผืนผ้า (จริงๆ ควรใช้ชื่อ rectangle มากกว่า)

ข้อมูลเข้า เช่น size เรียกว่าพารามิเตอร์ (parameter) เมื่ออยู่ในฟังก์ชัน จะเป็นตัวแปรชนิดหนึ่ง ที่รู้จักเพียงภายในของฟังก์ชันนั้นๆ (local variable) ถึงแม้จะมีตัวแปรชื่อเหมือนกันภายนอกฟังก์ชัน ก็จะถือว่าเป็นตัวแปรคนละตัวกัน

เมื่อฟังก์ชันถูกเรียกใช้พร้อมกับข้อมูลเข้า เช่น ต้องการวาดสี่เหลี่ยมจัตุรัสขนาด 50 x 50 ก็ต้องเรียกใช้ฟังก์ชัน “square (50) steps” ตัวเลข 50 เรียกว่าอาร์กิวเมนต์ (argument) เป็นข้อมูลที่จะถูกส่งผ่านฟังก์ชัน เชื่อมเข้ากับตัวแปรพารามิเตอร์ size ภายในฟังก์ชัน square ซึ่งข้อมูลนี้ (50) สามารถนำไปใช้ต่อได้ภายในฟังก์ชัน square

หน้าตาของบล็อกหรือฟังก์ชัน อาจไม่เพียงพอต่อการนำมันไปใช้งาน บางคร้้งต้องอ่านข้อมูลเพิ่มเติม เช่น อ่านข้อมูลความช่วยเหลือ (help) หรืออ่านคู่มือการใช้งานฟังก์ชัน (API: application program interface) ซึ่งจะมีข้อมูลรายละเอียดการใช้งานในแต่ละฟังก์ชัน

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s