คำหลัก เช่น ถัดไป &แตก เป็นส่วนหนึ่งของภาษาการเขียนโปรแกรม Ruby ดังนั้นหากคุณต้องการความเข้าใจอย่างถ่องแท้เกี่ยวกับ Ruby คุณจำเป็นต้องรู้ว่ามันทำงานอย่างไร
ใช้ทำอะไร
ใน Ruby เรามีลูปทุกประเภท
ถูกใจ :
- ในขณะที่
- จนถึง
- แต่ละตัว
เมื่อเขียนลูป คุณอาจต้องการข้ามการวนซ้ำหรือสิ้นสุดการวนซ้ำก่อน
นั่นคือที่ที่ next
&break
คีย์เวิร์ดเข้ามา!
มาดูวิธีใช้งานกัน
Ruby Next Keyword (ข้ามการวนซ้ำ)
next
คีย์เวิร์ดทำให้คุณสามารถข้ามการวนซ้ำได้หนึ่งครั้ง
ตัวอย่าง :
สมมติว่าคุณกำลังนับสตริง
และด้วยเหตุผลบางอย่าง คุณไม่ต้องการนับสตริงที่มีขนาดเท่ากับ 4
คุณทำได้ :
strings = ["one", "two", "four", "five"] strings.inject(0) do |sum, str| next if str.size == 4 sum + str.size end # nil
รหัสนี้จะไม่ทำงาน
คุณได้ศูนย์
ทำไม?
เพราะ next
คืนค่า nil
โดยค่าเริ่มต้น เช่นเดียวกับการโทร return
โดยไม่มีผลตอบแทน
อย่างที่คุณอาจทราบ…
การใช้ inject
รับค่าสุดท้ายที่ส่งคืนโดยบล็อก &ที่กลายเป็นอาร์กิวเมนต์แรกของการวนซ้ำครั้งต่อไป
กล่าวอีกนัยหนึ่ง sum
กลายเป็น nil
.
วิธีแก้ปัญหา?
เปลี่ยน next
บรรทัดนี้:
next sum if str.size == 4
ทำให้ next
ส่งคืนค่า sum
.
หากประสิทธิภาพไม่ใช่ลำดับความสำคัญสูงสุด (มักจะไม่ใช่) คุณสามารถกรองอาร์เรย์ล่วงหน้าเพื่อหลีกเลี่ยงการใช้ next
.
หรือดีกว่านั้น :
strings = ["one", "two", "four", "five"] strings.inject(0) { |sum, str| str.size == 4 ? sum : sum + str.size } # 6
นี่คือโอเปอเรเตอร์แบบไตรภาค
ฉันคิดว่า Ruby ให้เครื่องมือเพียงพอแก่คุณเพื่อหลีกเลี่ยงการใช้ next
.
ใช้เลย!
คีย์เวิร์ด Ruby Break (ออกจากลูปก่อนกำหนด)
break
คีย์เวิร์ดก็เหมือน next
แต่จะสิ้นสุดการวนซ้ำ &ส่งกลับค่า แทนที่จะข้ามการวนซ้ำเพียงครั้งเดียว
สามารถใช้สำหรับการกลับก่อนกำหนดจากการวนซ้ำได้
ทำไมไม่ใช้
return
คำสำคัญ? เพราะมันจะออกจาก method ปัจจุบัน ไม่ใช่แค่วนซ้ำ
หรือสิ้นสุดการวนซ้ำแบบไม่มีเงื่อนไข
ถูกใจสิ่งนี้ :
count = 0 loop do break if count == 10 puts count count += 1 end
ซึ่งจะพิมพ์รายการตัวเลขตั้งแต่ 0 ถึง 9
ทางเลือกที่ดีกว่าคือการใช้ times
วิธีการ upto
วิธีหรือช่วงบวกแต่ละวิธี
ตัวอย่าง :
0.upto(9).each(&method(:puts))
&method(:puts)
นี้ เป็นเพียงทางลัดในการเรียก puts
สำหรับแต่ละหมายเลข
หลีกเลี่ยงความสับสน:ต่อไปด้วยวิธี Ruby
เพียงเพราะมีบางอย่างเป็นคีย์เวิร์ด ก็ไม่ได้หมายความว่าจะใช้เป็นชื่อเมธอดไม่ได้
คลาสไม่กี่คลาสใน Ruby ใช้ next
เป็นวิธีการ
ชอบ String
&Integer
.
ตัวอย่าง :
1.next # 2
ผลลัพธ์ก็ไม่น่าแปลกใจใช่ไหม
เป็นอย่างไรบ้าง :
"zz".next # "aaa"
น่าสนใจกว่านี้หน่อย!
วิธีนี้ทำงานอย่างไร
ทุกคลาสใช้เวอร์ชัน next
ซึ่งมีตรรกะสำหรับค่าถัดไป
สำหรับ จำนวนเต็ม นี่เป็นเพียง +1
.
สำหรับ สตริง จะเพิ่มอักขระตัวสุดท้ายทีละตัว (ถัดไปเป็นตัวอักษร / +1
สำหรับตัวเลข) แล้วถ้ามีการส่งต่อ (9 -> 0
, z -> a
) จะเพิ่มอักขระถัดไปทางด้านซ้าย
สรุป
คุณได้เรียนรู้เกี่ยวกับ next
&break
คีย์เวิร์ดใน Ruby ช่วยให้คุณข้ามการวนซ้ำได้อย่างไร หรือหยุดการวนซ้ำตั้งแต่เนิ่นๆ
ตอนนี้ถึงตาคุณแล้วที่จะฝึกฝนทักษะ Ruby ของคุณ 🙂
ขอบคุณสำหรับการอ่าน!