Go 101 การเขียนโปรแกรมแบบวนทำซ้ำ (Repetition) ด้วยคำสั่ง for ในภาษาโก

golang for loop

ในการเขียนโปรแกรม สิ่งที่ต้องเจอบ่อยๆ และต้องใช้งานคือการทำงานที่ซ้ำๆ เช่นการคำนวณรวมราคาสินค้า จำนวนกี่ชิ้น ช้ินละกี่บาท เราก็จำเป็นต้องดึงราคาแต่ละรายการออกมาบวกกันเพื่อให้ทราบถึงผลรวมทั้งหมด บทความนี้จะแนะนำคำสั่งการทำงานแบบวนทำซ้ำในภาษาโกก็คือ 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 หวังว่าคงพอจะมีประโยชน์สำหรับคนที่กำลังศึกษาบ้างไม่มากก็น้อยนะครับ.