Jan 1, 2007

Tutorial 3 เรื่องของตัวเลข

แบบ Int แบบ Float และแบบ List

มีการอธิบายเกี่ยวกับตัวเลขไปแล้วในคราวก่อน และเราจะเข้าใจเรื่องของตัวเลขกันอย่างชัด ๆ ในการเล่น Patch นี้ครับ

เมื่อเราเปิด Patch นี้ขึ้นมา เราจะเห็น Message Box ที่เก็บตัวเลขไว้หลายชุด รวมไปถึงคำภาษาอังกฤษ ซึ่ง Object แต่ละแบบก็จะเข้าใจคำที่มีความหมายในภาษาอังกฤษที่แตกต่างกัน แต่ Message Box ส่วนใหญ่แล้ว จะเก็บตัวเลขหลากหลายแบบ ซึ่งเป็นเรื่องหลักที่เราจะทำความเข้าใจกัน

Max จะแยกความแตกต่างของจำนวนนับ (Integer) ที่ไม่มีจุด กับจำนวนทศนิยม (Decimal) ที่มีจุด จำนวนนับจะเรียกว่า ข้อมูลแบบ int ส่วนจำนวนทศนิยมจะเรียกว่า float (ภาษาอังกฤษจะเรียกจุดทศนิยมว่า Floating Point เพราะมองว่าจุดเหล่านี้สามารถเลื่อนตำแหน่งไปมาได้หรือลอยได้นั่นเอง ส่วนคำว่าจุดทศนิยมในภาษาไทย แท้จริงแล้วจะใช้กับเลขฐานสิบเท่านั้น)

เราไม่จำเป็นต้องกังวลเกี่ยวกับเรื่องชนิดของตัวเลข ในการเขียนโปรแกรมบน Max ครับ เพราะ Max จะจัดการเรื่องนี้ให้ ถึงขนาดแปลงเลขจาก Int ไป Float หรือจาก Float ไป Int ให้ด้วยซ้ำ ในกรณีที่ Object บางตัวต้องการรับข้อมูล Int แต่กลับได้ Float มา ก็จะทำการแปลงให้โดยอัตโนมัติ แต่สิ่งหนึ่งที่เราต้องรู้เกี่ยวกับเรื่องนี้คือ เมื่อข้อมูลแบบ Float มาเป็น Int นั้น Max จะทำการปัดเลขหลังจุดทิ้งหมด อย่างเช่น จาก 6.799999 มาเป็น Int แทนที่จะได้ 7 ตามความรู้สึกของเรา กลับปัดเลขหลังจุดทิ้งเหลือ 6 เท่านั้น

ข้อมูลแบบ list คือ ข้อมูลประเภทตัวเลขหลาย ๆ จำนวนที่วางห่างกันโดยการกด Space ซึ่งในการส่งจะส่งไปทั้งหมดทีเดียว ข้อมูลที่เป็น list สามารถเก็บได้ทั้งแบบ int และ Float เราจะเจอ list แบบเต็ม ๆ ในตอนต่อ ๆ ไปครับ

Number box

ในการแสดงตัวเลขเราจะใช้ Number Box ครับ ซึ่งจะอยู่บนช่วงแรก ๆ ของ Palette และมี Number Box อยู่สองแบบคือแบบ Int และแบบ Float

Inlet ของ Number box จะรับตัวเลขเข้ามาแล้วจะแสดงให้ผู้ใช้ทราบ ก่อนที่จะส่งค่าจำนวนเดียวกันนี้ออกทาง Outlet บางทีเราอาจใช้ Number Box ขั้นกลางระหว่าง Object 2 ตัว เพื่อจะตรวจดูความถูกต้องของจำนวนที่ทั้งสอง Object นั้น ส่งถึงกัน

- ทดลองคลิกที่ Message Box แต่ละตัวดูครับ และสังเกตผลที่เกิดขึ้น ไม่ว่าจะเป็นผลที่เกิดจาก Print หรือที่ปรากฏที่ Number Box รวมไปความแตกต่างของผลลัพธ์ของ Number Box ทั้งสองแบบ และความแตกต่างของ Message แต่ละอันที่ส่งต่อไปยัง Print

1. เราจะเห็นว่า Print จะไม่สนใจว่า Message เป็นเช่นไร และทำการ Print ทุกอย่างที่ส่งเข้ามา ส่วน Number Box จะแสดงได้ทีละจำนวน เมื่อมันได้รับ Message ประเภท List มันจะแสดงผลเฉพาะจำนวนแรกสุดรวมถึงการส่งต่อ ก็จะส่งออกไปแค่จำนวนแรกใน List เท่านั้น และถ้ามันรับ Message ประเภท Text ก็จะไม่มีผลอันใด ทั้งยังแสดงข้อความบอกผู้ใช้ว่า มันไม่เข้าใจ Message นั้น

2. Number box ใช้แสดงจำนวน Int และ Float เท่านั้น และหาก Number box แบบ Int รับจำนวน Float เข้ามา ก็จะทำการแปลงเลขด้วยการตัดเลขหลังจุดทิ้ง หรือหาก Number box แบบ Float รับแบบ Int เข้ามาก็จะมีการเติมเลขศูนย์หลังจุดให้

ความสามารถของ Number box ยังมีอีกครับ Patch นี้จะแสดงการใช้งาน Number box แบบทั่ว ๆ ไป เพื่อใช้อธิบายความแตกต่างของจำนวนแต่ละแบบเท่านั้น ส่วนการใช้งานในแบบอื่น ๆ เราจะได้เห็นกันใน Tutorial ที่ใช้แสดงความสามารถของ Number box โดยเฉพาะครับ ซึ่งจะแสดงไว้ใน Tutorial ที่ 10 โปรดติดตาม

สรุป

Message ที่ใช้บน Max อาจเป็นจำนวนเดี่ยว ๆ อย่าง int สำหรับจำนวนนับทั่ว ๆ ไป และ Float สำหรับจำนวนที่มีจุดทศนิยม จำนวนแบบที่ใช้ในโปรโตคอล MIDI และค่าของเวลาต่าง ๆ ที่มีหน่วยเป็นมิลลิวินาทีจะใช้ Int และจำนวนที่ใช้สำหรับการประมวลผลส่วนใหญ่จะใช้ Float เพราะต้องการความละเอียด ส่วนจำนวนที่มาเป็นชุดจะเรียกว่า List ของจำนวน สำหรับการส่งพร้อมกันรวดเดียว

Number Box ใช้ในการแสดงจำนวนที่เข้ามาครั้งล่าสุด และจะส่งต่อออกทาง Outlet และหากจำนวนที่ส่งเข้า Number box ไม่ใช่ประเภทเดียวกับ Number box ที่มี 2 ชนิดคือ Int กับ Float จะมีการแปลงเลขโดยอัตโนมัติให้เป็นแบบเดียวกับ Number Box นั้น ๆ เพื่อการใช้งานให้เหมาะสมกับประเภทของ Number Box

ศึกษาเพิ่มได้จาก Max Reference หัวข้อ

number box Display and output a number

No comments: