ในการเขียนโปรแกรม สิ่งที่ต้องเจอบ่อยๆ และต้องใช้งานคือการทำงานที่ซ้ำๆ เช่นการคำนวณรวมราคาสินค้า จำนวนกี่ชิ้น ช้ินละกี่บาท เราก็จำเป็นต้องดึงราคาแต่ละรายการออกมาบวกกันเพื่อให้ทราบถึงผลรวมทั้งหมด บทความนี้จะแนะนำคำสั่งการทำงานแบบวนทำซ้ำในภาษาโกก็คือ for loop นั่นเอง.
1. คำสั่ง for loop
รูปแบบคำสั่ง
for initialization; condition; update{ // if condition is true // Statement in this block will execute }
ตัวอย่าง
package main import "fmt" func main() { fmt.Println("Hello : 1") fmt.Println("Hello : 2") fmt.Println("Hello : 3") fmt.Println("Hello : 4") fmt.Println("Hello : 5") for i := 0; i < 12; i++{ fmt.Println("Hello For Loop : ",i) } }
หากจะให้เห็นถึงประโยชน์ในการใช้คำสั่ง for loop อย่างง่ายดูจากตัวอย่างบรรทัดที่ 7,8,9,10,11 เป็นการแสดงข้อความ “Hello : 1” ถึง “Hello : 5” จะเห็นได้ว่าเป็นการทำงานซ้ำๆ และลองคิดดูว่าถ้าหากต้องแสดงไปถึง “Hello : 500” หล่ะ โค๊ดจะเป็นอย่างไร ก็จะต้องเขียนแบบนี้ไปอีก 500 บรรทัด การแก้ปัญหานี้เราก็เอา for loop เข้ามาเขียนโปรแกรมไง จะเหลือแค่ 3 บรรทัด แบบบรรทัดที่ 13,14,15
- บรรทัดที่ 13 โปรแกรมจะทำงานในส่วน initialization ก่อน นั่นก็คือ i := 0 กำหนดให้ i มีค่าเท่ากับ 0 ต่อจากนั้นระบบก็จะมาทำงานในส่วน condition นั่นก็คือ i < 12 เปรียบเทียบเป็นจริงหรือเท็จ true or false เมื่อเป็นจริง ระบบก็จะรันคำสั่งที่อยู่ใน block for loop ภายในเครื่องหมาย { … } ในตัวอย่างก็คือ fmt.Println(“Hello For Loop : “,i) หลังจากนั้นระบบก็จะไปทำงานในส่วน update ในที่นี้ก็คือ i++ เป็นการเพิ่มค่า i = i + 1 หลังจากนั้นระบบก็จะทำงานในส่วน condition , update ไปเรื่อยๆ จนกว่า condition จะเป็นเท็จ false ก็จะจบ for loop ได้ผลลัพธ์ดังตัวอย่างภาพด้านล่าง
ผลการรันโปรแกรม

2. คำสั่ง for loop ในรูปแบบ while loop
รูปแบบคำสั่ง
for condition{ // if condition is true // Statement in this block will execute }
ตัวอย่าง
package main import "fmt" func main() { i := 0 for i < 12 { fmt.Println("Hello For Loop : ",i) i += 1 } }
- บรรทัดที่ 9 จะสังเกตุได้ว่ารูปแบบคำสั่ง for condition จะมีแค่ตรวจสอบเงื่อนไข condition เพียงอย่างเดียว ในที่นี้คือ i < 12 ถ้าเงื่อนไขเป็นจริง true ระบบก็จะรันคำสั่งในบรรทัดที่ 10 และ 11 จากนั้นก็จะกลับมาตรวจสอบเงื่อนไขอีกครั้ง ทำแบบนี้ไปเรื่อยๆ จนกว่าเงื่อนไขจะเป็นเท็จ false จึงจบการทำงาน for loop จากตัวอย่างได้ผลลัพธ์ดังภาพด้านล่าง
ผลการรันโปรแกรม

3. คำสั่ง for loop ในรูปแบบ do…while ด้วยการ break
รูปแบบคำสั่ง
for { // Statement in this block will execute // if condition is true if condition { break } }
ตัวอย่าง
package main import "fmt" func main() { i := 0 for { fmt.Println("Hello For Loop : ",i) i += 1 if i > 12 { break } } }
- บรรทัดที่ 9 สังเกตุได้ว่า for ไม่มีคำสั่งใดๆทั้งสิ้น ไม่มีการตรวจสอบเงื่อนไขใดๆเลย ทำให้โปรแกรมทำงาน Loop ในบรรทัดที่ 11 , 12 ได้เลย ทำก่อนหลังจากนั้นค่อยมาตรวจสอบเงื่อนไขในบรรทัดที่ 14 ด้วย if i > 12 ถ้าเงื่อนไขเป็นเท็จ false ระบบก็จะวนกลับมาทำงานในบรรทัดที่ 11 ต่อไปเรื่อยๆ จนกว่าเงื่อนไขในบรรทัดที่ 14 จะเป็นจริง true คือ i > 12 จะทำการสั่งหยุดการทำงาน for loop นี้ด้วยคำสั่ง break ในบรรทัดที่ 15 ผลลัพธ์จากการรันโปรแกรมดังภาพด้านล่าง
- ให้สังเกตุถ้าเราไม่มีคำสั่ง break ในบรรทัดที่ 15 for loop แบบนี้ก็จะเป็น inifinity loop คือทำงานวนซ้ำไม่มีวันจบหรือ loop อนันต์ เหมือนภาษา java => for( ; ; ) ระวังด้วยนะครับ เครื่องค้างได้ง่ายๆ ฮะๆๆๆ
ผลการรันโปรแกรม

4. คำสั่ง for loop แบบใช้ range เข้ามาช่วย
รูปแบบคำสั่ง
for index, value:= range listOfData{ // statement.. }
ตัวอย่าง
package main import "fmt" func main() { programming := []string{"Golang", "Python", "Java", "Java Script", "Rust"} for index, value:= range programming { fmt.Println(index, value) } }
- การใช้งาน for loop แบบใช้ range เข้ามาช่วยทำให้เขียนโปรแกรมได้ง่ายขึ้น โดยเราจะสามารถได้ข้อมูลทั้ง ตำแหน่ง index และ ข้อมูล value เอามาใช้งาน ได้ผลลัพธ์การรันโปรแกรมดังภาพด้านล่าง
ผลการรันโปรแกรม

สำหรับบทความนี้ทำให้เข้าใจการใช้ชุดคำสั่งการทำงานวนซ้ำ (Repetition) ด้วย for loop และการประยุกต์ใช้งานทั้ง 4 แบบคือ for loop, for loop แบบ while loop, for loop แบบ do…while loop และ for loop ด้วย range หวังว่าคงพอจะมีประโยชน์สำหรับคนที่กำลังศึกษาบ้างไม่มากก็น้อยนะครับ.