Computer >> Máy Tính >  >> Lập trình >> Ruby

Các câu lệnh sử dụng nhiều của Ruby Case

Bất cứ khi nào bạn cần sử dụng một số if / elsif thay vào đó bạn có thể xem xét sử dụng một câu lệnh trường hợp Ruby. Trong bài đăng này, bạn sẽ tìm hiểu một số trường hợp sử dụng khác nhau và cách tất cả thực sự hoạt động.

Các câu lệnh sử dụng nhiều của Ruby Case

Lưu ý:Trong các ngôn ngữ lập trình khác, điều này được gọi là công tắc tuyên bố.

Các thành phần của một câu lệnh trường hợp trong Ruby:

Từ khóa Mô tả
case Bắt đầu định nghĩa câu lệnh viết hoa. Sử dụng biến mà bạn sẽ làm việc với.
khi Mọi điều kiện có thể phù hợp là một câu lệnh when.
else Nếu không có gì phù hợp thì hãy thực hiện việc này. Tùy chọn.

Vỏ &Dãy Ruby

case câu lệnh linh hoạt hơn nó có thể xuất hiện ngay từ cái nhìn đầu tiên. Hãy xem một ví dụ mà chúng tôi muốn in một số thông báo tùy thuộc vào phạm vi giá trị nằm trong khoảng nào.

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

Tôi nghĩ mã này khá đẹp so với những gì if / elsif phiên bản sẽ trông như thế nào.

Ruby Case &Regex

Bạn cũng có thể sử dụng biểu thức chính quy làm when tình trạng. Trong ví dụ sau, chúng ta có serial_code với một chữ cái đầu tiên cho chúng tôi biết mức độ rủi ro của việc tiêu thụ sản phẩm này.

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

Khi nào không sử dụng Ruby Case

Khi bạn có một ánh xạ 1:1 đơn giản, bạn có thể bị cám dỗ để làm điều gì đó như thế này.

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

Theo ý kiến ​​của tôi, tốt hơn là nên làm điều này thay vì:

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

SITES[country]

Giải pháp băm hiệu quả hơn và dễ làm việc hơn. Bạn có nghĩ vậy không?

Cách hoạt động của trường hợp:phương thức ===

Bạn có thể tự hỏi làm thế nào case hoạt động dưới mui xe. Nếu chúng ta quay lại ví dụ đầu tiên của mình, đây là những gì đang xảy ra:

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

Như bạn có thể thấy, điều kiện bị đảo ngược vì Ruby gọi === trên đối tượng bên trái. === chỉ là một phương thức có thể được thực hiện bởi bất kỳ lớp nào. Trong trường hợp này, Range triển khai phương thức này bằng cách chỉ trả về true nếu giá trị được tìm thấy bên trong phạm vi.

Đây là cách === được triển khai trong Rubinius (cho Range lớp):

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

Nguồn:https://github.com/rubinius/rubinius/blob/master/core/range.rb#L178

Procs + Vỏ

Một lớp thú vị khác triển khai ===Proc lớp học.

Bài đăng có liên quan :Tìm hiểu thêm về procs và lambdas.

Trong ví dụ này, tôi xác định hai procs , một để kiểm tra even số và một số khác cho odd .

Trường hợp số
odd  = proc(&:odd?)
even = proc(&:even?)

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

Đây là những gì đang thực sự xảy ra:

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

Sử dụng === trên proc có tác dụng tương tự như sử dụng call .

Kết luận

Bạn đã biết cách hoạt động của câu lệnh trường hợp Ruby và mức độ linh hoạt của nó. Bây giờ đến lượt bạn bắt đầu sử dụng nó tốt nhất trong các dự án của riêng bạn.

Tôi hy vọng bạn thấy bài viết này hữu ích!

Hãy chia sẻ bài viết này để nhiều người có thể học hỏi! 🙂