การเขียนโปรแกรมในภาษา Swift เราสามารถเขียน Loops และคำสั่งเงื่อนไข if else หรือ switch case ซ้อนกันหลายๆ ชั้น เพื่อให้โปรแกรมทำงานตามที่เราต้องการ การใช้ break หรือ continue แบบปกติ จะมีผลกับ Loops หรือเงื่อนไข ที่อยู่ใกล้คำสั่งนั่นที่สุด แต่บางทีเราอาจจะอยากออกจาก Loop ด้านนอกสุดหรือจบการทำงานเลย Labeled Statements สามารถช่วยคุณได้
Labeled Statements คือการ Mark คำสั่งสามารถใช้ได้ทั้ง Loops หรือเงื่อนไขมีโครงสร้างดังนี้
label name : while condition {
statements
}
เมื่อเรา Mark ด้วย Labeled Statements แล้ว เราสามารถใช้ break หรือ continue ออกจาก Loops หรือทำงานรอบต่อไป ในจุดที่เรา Mark ไว้ได้ตามต้องการ ลองมาดูตัวอย่างกันครับ
ตัวอย่างการใช้งาน โปรแกรมเกมส์ Snakes and Ladders จาก Tutorial ของ Apple
เกมส์ Snakes and Ladders เป็นบอร์ดเกมส์ ที่เด็กๆ สมัยนี้คงไม่ค่อยได้เล่นกันแล้ว คนเคยเล่นผมคิดว่าอายุ 30+ แน่นอน เกมส์นี้เป้าหมายคือ ไปเดินทางไปให้ถึงจุดสุดท้ายของ บอร์ดเกมส์คือช่องที่ 25 ใครถึงก่อนเป็นคนชนะ โดยการเดินใช้วิธีการถอยลูกเต๋า ภายในบอร์ดเกมส์จะมีบันไดและงู ซึ่งเมื่อเราเดินไปตกที่ช่องบันไดจะทำให้เราข้ามไปอยู่ในช่องที่บันไดไปถึง ส่วนงูจะทำให้เราย้อนกลับมา
ว่าแล้วก็เริ่มเขียนโปรแกรมสร้างบอร์ดเกมส์กันเลย
let finalSquare = 25
var board = [Int](repeating: 0, count: finalSquare + 1) // สร้างช่องในบอร์ดเกมส์
board[03] = +08; board[06] = +11; board[09] = +09; board[10] = +02 // บันได
board[14] = -10; board[19] = -11; board[22] = -02; board[24] = -08 // งู
var square = 0
var diceRoll = 0
gameLoop: while square != finalSquare {
diceRoll += 1
if diceRoll == 7 { diceRoll = 1 }
switch square + diceRoll {
case finalSquare:
// เมื่อมาถึง finalSquare เกมส์จบ
break gameLoop
case let newSquare where newSquare > finalSquare:
// ถ้าถอยเต๋าเกินกว่าช่องสุดท้ายก็ถอยใหม่
continue gameLoop
default:
// เมื่อถอยเต๋าเสร็จ ก็เดินบนบอร์ดเกมส์
square += diceRoll
square += board[square]
}
}
print("Game over!")
จุดสังเกตุคือ เราสามารถใช้ break, continue ตามด้วย labeled statement เพื่อทำงานกับ Loops ด้านนอกที่สุดได้ ถ้าไม่ใส่ labeled statement จะทำให้ break, continue จะทำให้ส่งผลกับ switch case ที่ครอบมันอยู่