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

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

ข้อมูลที่รับเข้ามา อาจมีการพักตัวอยู่ในตัวแปร (variables) จากนั้นสามารถปรับเปลี่ยนข้อมูลให้ทันสมัยได้ สามารถสร้างชื่ออ้างอิงที่มีความหมายให้กับข้อมูลได้ เรียกใช้ข้อมูลผ่านชื่อที่ตั้งใหม่ได้ และสามารถส่งต่อข้อมูล จากงานหนึ่งสู่อีกงานหนึ่งได้ กลไกที่ทำให้โปรแกรมทำงานได้คือ การควบคุมลำดับการทำงานและการส่งผ่านข้อมูลระหว่างงาน (control flow)

มาลองดูตัวอย่างในโปรเจก SimpleCircuit เพื่อดูวิธีการควบคุม ให้งานและข้อมูลลื่นไหลในโปรแกรมได้ถูกต้องตามที่ต้องการ ใน Scratch มีการควบคุมการทำงานอยู่ 3 แบบ คือ 1. การทำงานเมื่อมีเหตุการณ์หนึ่งมากระตุ้น 2. การทำงานซ้ำๆ และ 3. การทำงานแบบมีเงื่อนไข

ตั้งแต่เริ่มจนจบโปรแกรม มีเหตุการณ์เกิดขึ้นมากมายหลายแบบ เช่นในสคริปต์ของเวที (ซ้ายมือ) เมื่อผู้ใช้คลิกธงเขียว สคริปต์ที่รับเหตุการณ์นี้ก็เริ่มต้นทำงาน และระหว่างโปรแกรมทำงาน ผู้ใช้ยังโต้ตอบกับโปรแกรมได้ โดยกดแป้นเว้นวรรค (space bar) ทำให้เวทีสับเปลี่ยนพื้นฉากหลัง เปลี่ยนหน้าตาของแผงวงจร อีกตัวอย่างหนึ่งคือ การส่งรหัสจากสคริปต์หนึ่ง ทำให้อีกสคริปต์ที่รับรหัสนี้ทำงาน

การควบคุมการทำงานซ้ำ มีหลายรูปแบบ เช่น แบบรู้จำนวนรอบแน่นอน (บล็อก repeat) แบบไม่รู้จำนวนรอบแน่นอน แต่อาศัยเงื่อนไขมาช่วยในการหยุด (บล็อก forever if) และแบบทำซ้ำจนกว่าจะจบโปรแกรม ตัวอย่างเช่น สคริปต์ Stage และ Bulb จะทำงานวนซ้ำไปเรื่อยๆ จนกว่าจะจบโปรแกรม โดยนำสิ่งที่ต้องการทำซ้ำมาใส่ในบล็อก forever

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

บล็อกเงื่อนไขหกเหลี่ยมสีเขียว จะคืนค่าจริงหรือเท็จออกมา บางครั้งเงื่อนไขเดียวอาจไม่พอ เช่นสคริปต์หลอดไฟต้องการรู้ว่าแผงวงจรต่อครบวงจรหรือยัง ต้องเช็กอุปกรณ์ทุกตัวว่าเชื่อมต่อกับแผงวงจรหรือยัง นั้นก็คือ แบตเตอรีต่อหรือยัง สวิตช์ต่อหรือยัง หลอดไฟต่อหรือยัง สุดท้ายเงื่อนไขทั้งหมดต้องนำมาประมวณผล ว่าได้จริงหรือเท็จ การประมวณผลทางตรรกะใน Scratch ทำได้ 3 แบบ คือใช้ ตรรกะและ (and) ตรรกะหรือ (or) ตรรกะไม่ (not) คำตอบหาได้จากตารางความจริง (Truth table) ในแต่ละแบบดังนี้

จะเห็นว่าตรรกะและ (and) จะเป็นจริงได้กรณีเดียวคือเงื่อนไข A กับ B ตัองเป็นจริง กรณีอื่นๆ เป็นเท็จหมด ส่วนตรรกะหรือ (or) จะเป็นเท็จได้กรณีเดียวคือเงื่อนไข A กับ B ตัองเป็นเท็จ กรณีอื่นๆ เป็นจริงหมด ส่วนตรรกะไม่ (not) จะสลับเงื่อนไขจากจริงเป็นเท็จ หรือจากเท็จเป็นจริง

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

Advertisements

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 )

Google+ photo

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

Twitter picture

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

Facebook photo

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

w

Connecting to %s