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

ทำความเข้าใจกับ Ruby Next &Break คำสำคัญ

คำหลัก เช่น ถัดไป &แตก เป็นส่วนหนึ่งของภาษาการเขียนโปรแกรม 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 ของคุณ 🙂

ขอบคุณสำหรับการอ่าน!