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

การใช้คำชี้แจงกรณีทับทิมหลายครั้ง

เมื่อใดก็ตามที่คุณต้องการใช้ if / elsif คำสั่งที่คุณสามารถพิจารณาใช้คำสั่งกรณี Ruby แทน ในโพสต์นี้ คุณจะได้เรียนรู้กรณีการใช้งานที่แตกต่างกันสองสามกรณีและวิธีการทำงานทั้งหมดภายใต้ประทุน

การใช้คำชี้แจงกรณีทับทิมหลายครั้ง

หมายเหตุ:ในภาษาการเขียนโปรแกรมอื่นๆ เรียกว่า สวิตช์ คำสั่ง

ส่วนประกอบของคำสั่ง case ใน Ruby:

คำหลัก คำอธิบาย
เคส เริ่มนิยามคำสั่ง case รับตัวแปรที่คุณจะใช้งาน
เมื่อ ทุกเงื่อนไขที่สามารถจับคู่ได้คือเงื่อนไขหนึ่งเมื่อคำสั่ง
อื่น ถ้าไม่มีอะไรตรงกัน ให้ทำดังนี้ ไม่บังคับ

ทับทิม Case &Ranges

case คำสั่งมีความยืดหยุ่นมากกว่าที่จะปรากฏตั้งแต่แรกเห็น มาดูตัวอย่างกันว่าเราต้องการพิมพ์ข้อความโดยขึ้นอยู่กับช่วงของค่า

case capacity
when 0
  "You ran out of gas."
when 1..20
  "The tank is almost empty. Quickly, find a gas station!"
when 21..70
  "You should be ok for now."
when 71..100
  "The tank is almost full."
else
  "Error: capacity has an invalid value (#{capacity})"
end

ฉันคิดว่าโค้ดนี้ค่อนข้างสวยเมื่อเทียบกับ if / elsif เวอร์ชั่นก็จะหน้าตาประมาณนี้

Ruby Case &Regex

คุณยังสามารถใช้นิพจน์ทั่วไปเป็น when สภาพ. ในตัวอย่างต่อไปนี้ เรามี serial_code ด้วยตัวอักษรเริ่มต้นที่บอกเราว่าผลิตภัณฑ์นี้มีความเสี่ยงต่อการบริโภคเพียงใด

case serial_code
when /\AC/
  "Low risk"
when /\AL/
  "Medium risk"
when /\AX/
  "High risk"
else
  "Unknown risk"
end

เมื่อใดที่ไม่ควรใช้ Ruby Case

เมื่อคุณมีการทำแผนที่ 1:1 อย่างง่าย คุณอาจถูกล่อลวงให้ทำสิ่งนี้

case country
when "europe"
  "https://eu.example.com"
when "america"
  "https://us.example.com"
end

ในความคิดของฉัน ควรทำสิ่งนี้แทน:

SITES = {
  "europe"  => "https://eu.example.com",
  "america" => "https://us.example.com"
}

SITES[country]

โซลูชันแฮชมีประสิทธิภาพและใช้งานได้ง่ายกว่า คิดไม่ถึง?

กรณีทำงานอย่างไร:วิธี ===

คุณอาจสงสัยว่า case ทำงานภายใต้ประทุน หากเราย้อนกลับไปที่ตัวอย่างแรก นี่คือสิ่งที่เกิดขึ้น:

(1..20)   === capacity
(21..70)  === capacity
(71..100) === capacity

อย่างที่คุณเห็น เงื่อนไขกลับกันเพราะ Ruby เรียก === บนวัตถุทางด้านซ้าย === เป็นเพียงวิธีการที่สามารถนำมาใช้โดยชั้นเรียนใดก็ได้ ในกรณีนี้ Range ใช้เมธอดนี้โดยคืนค่า true เฉพาะเมื่อพบค่าภายในช่วงเท่านั้น

นี่คือวิธีที่ === ถูกนำมาใช้ใน Rubinius (สำหรับ Range คลาส):

def ===(value)
  include?(value)
end

ที่มา:https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178

Procs + Case

อีกคลาสที่น่าสนใจที่ใช้ === คือ Proc ชั้นเรียน

โพสต์ที่เกี่ยวข้อง :เรียนรู้เพิ่มเติมเกี่ยวกับ procs &lambdas

ในตัวอย่างนี้ ฉันกำหนด procs . สองตัว อันหนึ่งเพื่อตรวจสอบ even ตัวเลข และอีกอันสำหรับ odd .

odd  = proc(&:odd?)
even = proc(&:even?)

case number
when odd
  puts "Odd number"
when even
  puts "Even number"
end

นี่คือสิ่งที่เกิดขึ้นจริง:

odd.===(number)
even.===(number)

การใช้ === ใน proc มีผลเหมือนกับการใช้ call .

บทสรุป

คุณได้เรียนรู้ว่าคำสั่งกรณี Ruby ทำงานอย่างไรและมีความยืดหยุ่นเพียงใด ตอนนี้ถึงตาคุณแล้วที่จะเริ่มใช้ประโยชน์จากมันให้ดีที่สุดในโครงการของคุณเอง

ฉันหวังว่าคุณจะพบว่าบทความนี้มีประโยชน์!

โปรดแชร์โพสต์นี้เพื่อให้ผู้คนได้เรียนรู้มากขึ้น! 🙂