Foreach
ชลันธร การดำริห์ 650710535
Looping ในภาษาโปรแกรมคือวิธีการดำเนินการคำสั่งหรือชุดของคำสั่งซ้ำหลายครั้งขึ้นอยู่กับเงื่อนไขที่ใช้ โดยเงื่อนไขต้องเป็นจริงเพื่อทำการวนซ้ำ (loop)
Foreach Loop ใน C#
การ loop แบบ foreach ในภาษา C# จะเป็นการวนซ้ำผ่าน Element(องค์ประกอบ) ของ Collection โดยทั่วไปจะใช้กับ colletion ที่เป็น IEnumerable โดยอาจเป็น array หรือ list โดยจะดำเนินการคำสั่งที่กำหนดไว้กับแต่ละ element ที่มีอยู่ในอาเรย์นั้นทีละตัว
flowchart การทำงานของ foreach

หลักการทำงานของ foreach จาก flowchart
เมื่อเริ่มต้น(start) โปรแกรมจะทำการตรวจสอบองค์ประกอบใน collection ว่ามีองค์ประกอบใดยังไม่ประมวลผลหรือไม่ หากมีจำดำเนินการนำค่าที่ยังไม่ได้ประมวลผลมาใช้ และทำงานตามคำสั่งในstatement และทำการวนซ้ำ จนกว่าจะไม่มีค่าองค์ประกอบใน collection แล้วจึง หยุดการทำงาน(stop)
Syntax foreach ใน ภาษา C#
องค์ประกอบหลัก
data_type คือ type ของข้อมูลใน collection ที่ต้องการวนซ้ำ เช่น int char string เป็นต้น
var_name คือ ชื่อตัวแปรที่สร้างขึ้นเพื่อใช้อ้างถึงองค์ประกอบ ใน collection ในระหว่างการวนซ้ำ
collection_variable คือ ตัวแปรของ collection ที่คุณต้องการวนซ้ำ
statement คือ คำสั่งที่ต้องการให้โปรแกรมทำงานใน loop
การใช้ foreach loop ใน C# เบื้องต้น
ต้องใส่คำสั่งของ loop ไว้ในปีกา { statement }
ประกาศตัวแปรประเภทเดียวกับ collection แทนที่จะประกาศตัวนับ(loop counter)
ในอีกกรณี เราสามารถประกาศประเภทของตัวแปรเป็น var ได้ โดยไม่ต้องระบุประเภทอย่างชัดเจน compiler จะทำการอนุมานตัวแปรให้โดยอัตโนมัติ
สามารถใช้ตัวแปรที่สร้างขึ้นมาใหม่ แทนการเข้าถึงองค์ประกอบได้ด้วยค่า ดัชนี
1
2
3
4
5
ตัวอย่างการใช้งาน
อธิบายการทำงานของโปรแกรมตัวอย่าง
เมื่อเริ่มต้น loop ขั้นตอนแรกโปรแกรมจะทำการตรวจสอบค่า ในcollection animals ว่ามีองค์ประกอบใดยังไม่ถูกประมวลผลบ้างซึ่งในครั้งแรก จะพบว่าทุกองค์ประกอบใน animals ยังไม่ถูกประมวลผล คือ("ant", "bird", "lion", "tiger")
หลังจากนั้นจะทำการนำค่าแรกซึ่งคือ 'ant' มาประมวลผลโดยการนำค่ามาเก็บในตัวแปรที่สร้างใหม่คือ animal และทำการประมวลผลใน statement ซึ่งจำทำการพิมพ์ค่าขององค์ประกอบนั้นออกมา คือ 'ant'
หลังจากนั้นจะทำการวนไปเชคในขั้นตอนแรกซึ่งคือตรวจสอบค่าที่ยังไม่ถูกประมวลผลและนำมาใช้ซ้ำไปเรื่อยๆจนเมื่อตรวจสอบว่าไม่มีองค์ประกอบที่ยังไม่ถูกประมวลผลเหลือในcollection แล้วจึงหยุดการทำงานของ loop
ทั้งนี้ โครงสร้าง(structure) foreach ยังสามารถใช้ได้ใน collection อื่นๆอีก เช่น list หรือdictionary
ตัวอย่าง
ชื่อ: Alice, คะแนน: 90
ชื่อ: Bob, คะแนน: 85
ชื่อ: Charlie, คะแนน: 92
การใช้foreach กับ list และ array มีรูปแบบการประกาศตัวแปรที่เหมือนกัน แม้ว่าจะมีประเภทข้อมูลที่แตกต่างกัน
Skip and Break of foreach
Skip ข้ามการทำงานใน loop
เราสามารถใช้คำสั่ง 'continue' ร่วมกับคำสั่งควบคุม เช่น if-else เพื่อกำหนดเงื่อนไขใน statement เพื่อข้ามการทำงานหรือการวนซ้ำได้
Break หยุดการทำงานใน loop
เราสามารถใช้คำสั่ง 'break' ร่วมกับคำสั่งควบคุม เช่น if-else เพื่อกำหนดเงื่อนไขใน statement เพื่อหยุดการทำงานหรือการวนซ้ำได้
ข้อจำกัดการใช้งาน foreach loop ของC#
การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array เนื่องจากออกแบบมาสำหรับอ่านเท่านั้น
foreach loop ไม่มีการติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้
Index: 10
Index: 20
Index: 30
Index: 40
Index: 50
#จะสังเกตุได้ว่าค่าที่ได้ออกมาจะไม่ใช่ ค่าของ index แต่เป็น ค่าใน index แทน
foreach loop จะทำงานไปข้างหน้าทีละครั้งเท่านั้น ไม่สามารถย้อนกลับได้
foreach loop จะทำการดำเนินไปข้างหน้าทีละหนึ่งครั้งเท่านั้น และจะไม่สามารถย้อนกลับหรือเปลี่ยนตำแหน่งของ loop ที่ต้องการจะไปได้
เปรียบเทียบ foreach ใน C, Java ,python
JAVA foreach loop
ใน Java มีโครงสร้าง Foreach สำหรับวนซ้ำข้อมูลใน collection คล้ายกับใน C#
โดยในภาษาjava จะใช้keyword 'for' ในการใช้งาน หลังจากนั้นจะทำการประกาศตัวแปร และcollection โดยคั่นด้วย colon(:)
syntax
ตัวอย่างการใช้งาน
ข้อจำกัด
การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array เนื่องจากออกแบบมาสำหรับอ่านเท่านั้น
foreach loop ไม่มีการติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้
foreach loop จะทำงานไปข้างหน้าทีละครั้งเท่านั้น
foreach loop ไม่สามารถประมวลผลคำสั่งตัดสินใจสองคำสั่งพร้อมกันได้
สรุป
การใช้งาน foreach ในภาษาjava มีความคล้ายกับ C# ในเรื่องการใช้งาน และมีข้อจำกัดหลัก ๆ ที่เหมือนกัน คือ การใช้ foreach loop ไม่เหมาะสมกับการแก้ไขข้อมูลใน array หรือ collection foreach loop ไม่ได้ติดตามค่า ดัชนี (index) จึงไม่สามารถนำค่า ดัชนีมาใช้ได้ และ จะทำงานไปข้างหน้าทีละครั้งเท่านั้น
Python foreach Loop
ใน Python ไม่มีคำสั่ง foreach แต่สามารถใช้คำสั่ง for ในการวนลูป element ใน collection แต่จะใช้กับ collection Iterable ซึ่งทำหน้าที่เหมือน foreach ในภาษาอื่นๆ
syntax
ตัวอย่างการใช้งาน
ข้อจำกัด
มีข้อจำกัดเรื่องการทำงานไปข้างทีละครั้งเหมือนกัน
แต่ python ไม่มีข้อจำกัดเรื่องการเข้าถึง index แบบเดียวกับ C# เนื่องจาก python มีฟังก์ชั่น enumerate() ซึ่งช่วยติดตามค่า index
และ python สามารถประกาศตัวแปรที่ใช้ได้โดยไม่ต้องระบุชนิดข้อมูลได้ เนื่องจากเป็น dynamic typing
ตัวอย่าง enumerate()
สรุป
python สามารถใช้การวนซ้ำผ่าน collection ได้เหมือนกัน โดยจะมีข้อจำกัดบางข้อที่เหมือนกัน เช่น การทำงานแบบทีละครั้ง และจะมีข้อจำกัดบางอย่างที่แตกต่าง เช่น python สามารถประกาศตัวแปรที่ใช้ได้โดยไม่ต้องระบุชนิดข้อมูลได้ python สามารถติดตามค่าดัชนีได้ ผ่านการใช้ฟังก์ชั่น enumerate()
C foreach Loop
ในภาษา C ไม่มีคำสั่งสำหรับการ foreach โดยตรง ต้องใช้การลูปอื่น เช่น for loop เพื่อวนรอบข้อมูลผ่าน collection ได้
ตัวอย่างการใช้ for
สรุป
จากการใช้ loop for ทำให้เห็นได้ว่าสามารถเข้าถึง index ของข้อมูลได้ และสามารถแก้ไขข้อมูลได้ หรือแก้ไขการนับของloop ได้ทำให้ไม่มีข้อจำกัดเช่นเดียวกับ foreach ของ C# ซึ่งยืดหยุ่นสูงกว่า แต่จะสังเกตุได้ว่า code ที่ได้ยากและซับซ้อนกว่า เมื่อเปรียบเทียบกับ foreach ของ C#
สรุปความแตกต่างระหว่าง For loop กับ Foreach loop
For loop จะทำงานตามคำสั่งจนกว่าเงื่อนไขที่กำหนดจะเป็นเท็จ ในขณะที่ foreach loop จะทำงานตามคำสั่งสำหรับแต่ละองค์ประกอบที่มีอยู่ในอาร์เรย์ โดยไม่จำเป็นต้องกำหนดขีดจำกัดขั้นต่ำหรือสูงสุด
ใน for loop เราสามารถวนซ้ำอาร์เรย์ได้ทั้งในทิศทางไปข้างหน้าและถอยหลัง foreach loop เช่น จากดัชนี 0 ถึง 9 และจากดัชนี 9 ไป 0 เราจะวนซ้ำอาร์เรย์ได้เพียงในทิศทางไปข้างหน้าเท่านั้น
Foreach loop จะทำการคัดลอกอาร์เรย์และนำสำเนานั้นไปใช้ในการดำเนินการ ในขณะที่ for loop จะทำงานกับอาร์เรย์เดิมโดยไม่ทำการคัดลอกข้อมูลใด ๆ
กรณีที่เหมาะสมกับการใช้ foreach ในการทำงาน
เมื่อต้องการอ่านค่าจาก collection เท่านั้นโดยไม่ต้องการเปลี่ยนแปลงค่า
ต้องการวนซ้ำข้อมูลผ่านทุกองค์ประกอบของ collection
ไม่มีการจัดการกับดัชนีตัวแปร ซึ่งช่วยลดความซับซ้อนในการเขียน
SLIDE PRESENTATION
VIDEO PRESENTATION
REFERENCE
C#
GeeksforGeeks. (2019, August 6). C# foreach loop. GeeksforGeeks. https://www.geeksforgeeks.org/c-sharp-foreach-loop/
Microsoft. (2023, March 14). Implicitly typed local variables. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/implicitly-typed-local-variables
Microsoft. (n.d.). IEnumerable interface. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/api/system.collections.ienumerable?view=net-8.0
Microsoft. (2023, November 15). Iteration statements - for, foreach, do, and while. Microsoft Learn. https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/statements/iteration-statements
Ravikiran, A. S. (2024, October 11). Mastering foreach in C#. Simplilearn. https://www.simplilearn.com/tutorials/c-sharp-tutorial/c-sharp-foreach
Python
GeeksforGeeks. (2024, September 13). For loops in Python. GeeksforGeeks.https://www.geeksforgeeks.org/python-for-loops/
GeeksforGeeks. (2023, September 11). How to access index in Python’s for loop. GeeksforGeeks.https://www.geeksforgeeks.org/how-to-access-index-in-pythons-for-loop/
w3schools. (n.d.). Python iterators. W3Schools.https://www.w3schools.com/python/python_iterators.asp
Java
GeeksforGeeks. (2024, October 04). For-each loop in Java. GeeksforGeeks.https://www.geeksforgeeks.org/for-each-loop-in-java/
C
GeeksforGeeks. (2023, June 28). C for Loop. GeeksforGeeks.
Last updated