Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

เชี่ยวชาญ Keywords 'next' และ 'break' ใน Ruby: คู่มือสมบูรณ์

Keywords อย่าง next และ break เป็นส่วนหนึ่งของภาษา Ruby — ถ้าอยากเข้าใจ Ruby ลึก ต้องรู้ว่ามันทำงานยังไง

ใช้ทำอะไร?

ใน Ruby มี Loops หลายแบบ — เช่น: while, until, each

ตอนเขียน Loop อาจอยากข้ามรอบ (iteration) หรือ หยุด Loop ก่อนเวลา — นั่นคือที่มาของ next และ break!

มาดูวิธีใช้กัน

Ruby Next Keyword (ข้ามรอบ)

next ใช้ข้าม 1 รอบ (iteration)

ตัวอย่าง: นับสตริง — ไม่อยากนับสตริงที่ยาว 4 ตัวอักษร

เขียนได้แบบนี้:

 strings = ["one", "two", "four", "five"]
strings.inject(0) do |sum, str|
  next if str.size == 4
  sum + str.size
end
# nil 

โค้ดนี้ ไม่ทำงาน — ได้ nil

ทำไม? next คืน nil โดย Default (เหมือน return ไม่มีค่า) — inject นำค่าสุดท้ายของ Block ไปเป็น Argument ถัดไป sum กลายเป็น nil

แก้ได้ยังไง? เปลี่ยนบรรทัด next เป็น:

 next sum if str.size == 4 

ทำให้ next คืนค่า sum

ถ้า Performance ไม่ใช่ Priority สูงสุด (มักไม่ใช่) — กรอง Array ก่อนดีกว่า ไม่ต้องใช้ next

หรือดีกว่านี้:

 strings = ["one", "two", "four", "five"]
strings.inject(0) { |sum, str| str.size == 4 ? sum : sum + str.size }
# 6 

นี่คือ Ternary Operator — Ruby ให้เครื่องมือพอที่หลีกเลี่ยง next ใช้สิ!

Ruby Break Keyword (ออกจาก Loop ก่อนเวลา)

break คล้าย next แต่จบ Loop และคืนค่า แทนที่จะข้ามแค่ 1 รอบ

ใช้ Early return จาก Loop ได้

ทำไมไม่ใช้ return? เพราะมันจะออกจาก Method ทั้งหมด ไม่ใช่แค่ Loop

หรือจบ Unconditional Loop

เช่นนี้:

 count = 0
loop do
  break if count == 10
  puts count
  count += 1
end 

พิมพ์ตัวเลข 0 ถึง 9 — แต่ทางเลือกดีกว่าคือ times, upto, หรือ Range + each

ตัวอย่าง:

 0.upto(9).each(&method(:puts)) 

&method(:puts) คือ Shortcut เรียก puts ทุกตัวเลข

หลีกเลี่ยงความสับสน: Next เป็น Ruby Method ด้วย

เพราะ Keyword ไหนไม่ได้หมายความว่าจะไม่ได้เป็น Method Name

คลาสบางตัว Implement next เป็นเมธอด — เช่น String และ Integer

ตัวอย่าง:

 1.next # 2 

ผลลัพธ์ไม่แปลกหรอก

ลองนี้:

 "zz".next # "aaa" 

น่าสนใจกว่า!

ทำงานยังไง? ทุกคลาส Implement next เอง — Logic สำหรับค่าถัดไป

Integer: แค่ +1 — String: เพิ่มตัวอักษรสุดท้าย 1 ตัว (อักษรถัดไป / +1 สำหรับตัวเลข) ถ้ามี Carryover (9 -> 0, z -> a) จะเพิ่มตัวอักษรข้างซ้าย

Summary (สรุป)

คุณเรียนรู้ next และ break ใน Ruby แล้ว — ช่วยข้ามรอบ หรือ หยุด Loop ก่อนเวลา

ตอนนี้ถึงคุณฝึกทักษะ Ruby 🙂

ขอบคุณที่อ่านครับ!