เครื่องสถานะ กับไฟทางข้าม
ระบบที่มีหลายขั้นตอนเรียงกันเขียนง่ายที่สุดด้วยการตั้งชื่อแต่ละสถานะ แล้วบอกว่าจะย้ายไปสถานะไหนเมื่อไร
ในบทนี้คุณจะ
- แทนลำดับการทำงานด้วยตัวแปรสถานะ
- เขียนเงื่อนไขการย้ายสถานะให้ชัดเจน
- อธิบายว่าทำไมสองสถานะต้องไม่เกิดพร้อมกัน
1. ตั้งชื่อแต่ละช่วงเวลา
ไฟทางข้ามมีช่วงรถไป คนรอ แล้วคนข้าม รถหยุด ตั้งชื่อว่า TRAFFIC กับ CROSSING แล้วเก็บไว้ในตัวแปรหนึ่งตัว โปรแกรมจะถามแค่ว่า "ตอนนี้อยู่สถานะไหน" แล้วทำตามนั้น
2. การย้ายสถานะคือกฎที่เขียนไว้ชัด
จาก TRAFFIC ไป CROSSING เมื่อมีคนกดปุ่มและผ่านเวลาขั้นต่ำแล้ว จาก CROSSING กลับไป TRAFFIC เมื่อครบเวลาข้าม เขียนกฎเหล่านี้ไว้ที่เดียวจะแก้ง่ายกว่าการกระจาย if ไปทั่ว
3. สองสถานะพร้อมกันคืออุบัติเหตุ
ไฟเขียวรถกับไฟเขียวคนติดพร้อมกันคือความผิดพลาดที่อันตราย การใช้ตัวแปรสถานะตัวเดียวทำให้เป็นไปไม่ได้โดยโครงสร้าง ไม่ใช่โดยความระมัดระวังของคนเขียน พิมพ์ STATE ออก Serial ทุกครั้งที่เปลี่ยน
ตรวจความเข้าใจ
ทำไมการเก็บสถานะในตัวแปรเดียวถึงปลอดภัยกว่าใช้ธงหลายตัว
ลงมือทำ
เขียนไฟทางข้ามด้วยตัวแปรสถานะตัวเดียว แล้วพิมพ์คำว่า STATE พร้อมชื่อสถานะทุกครั้งที่เปลี่ยน
เริ่มแล็บใน StudioStudio จะเปิดวงจรเริ่มต้นของบทนี้ พร้อมคำใบ้ เฉลย และการตรวจคำตอบจากค่าที่วัดได้