×

Rẽ nhánh với case và when trong Ruby

Trong lập trình Ruby, việc kiểm soát luồng chương trình là một phần quan trọng để tạo ra mã nguồn hiệu quả và dễ duy trì. Một trong những cách phổ biến để thực hiện điều này là sử dụng cấu trúc "case" và "when". Cấu trúc này cho phép bạn kiểm tra giá trị của một biểu thức và thực hiện các hành động khác nhau dựa trên giá trị đó.

Cấu trúc cơ bản của "case" và "when"

Cú pháp cơ bản của "case" và "when" trong Ruby rất đơn giản. Dưới đây là ví dụ minh họa:

case expression
when value1
  # Hành động khi biểu thức có giá trị là value1
when value2
  # Hành động khi biểu thức có giá trị là value2
else
  # Hành động mặc định khi biểu thức không khớp với bất kỳ giá trị nào
end

Trong đó:

  • expression là biểu thức cần kiểm tra.
  • value1, value2 có thể là các giá trị hoặc phạm vi giá trị mà bạn muốn so sánh với biểu thức.
  • else là tùy chọn và được thực thi nếu biểu thức không khớp với bất kỳ giá trị nào trong các câu "when".

Ví dụ cụ thể

Dưới đây là một ví dụ cụ thể hơn để minh họa cách sử dụng "case" và "when":

day = "Thursday"

case day
when "Monday"
  puts "Start of the work week."
when "Wednesday"
  puts "Midweek day."
when "Friday"
  puts "Almost weekend."
else
  puts "Just another day."
end

Kết quả của đoạn mã trên sẽ là "Just another day." vì giá trị của biến day không khớp với bất cứ giá trị nào trong các trường hợp "when".

So sánh với "if-elsif-else"

Cấu trúc "case" và "when" thường được so sánh với cấu trúc "if-elsif-else" vì chúng đều dùng để kiểm tra nhiều điều kiện. Tuy nhiên, "case" và "when" có thể giúp mã nguồn trở nên gọn gàng hơn khi bạn cần kiểm tra cùng một biểu thức với nhiều giá trị khác nhau. Dưới đây là một ví dụ chuyển đổi từ "if-elsif-else" sang "case-when":

Sử dụng "if-elsif-else":

if day == "Monday"
  puts "Start of the work week."
elsif day == "Wednesday"
  puts "Midweek day."
elsif day == "Friday"
  puts "Almost weekend."
else
  puts "Just another day."
end

Chuyển đổi sang "case-when":

case day
when "Monday"
  puts "Start of the work week."
when "Wednesday"
  puts "Midweek day."
when "Friday"
  puts "Almost weekend."
else
  puts "Just another day."
end

Sử dụng phạm vi trong "case" và "when"

Một tính năng mạnh mẽ khác của "case" và "when" trong Ruby là khả năng sử dụng các phạm vi (range). Điều này rất hữu ích khi bạn muốn kiểm tra một biểu thức có thuộc một khoảng giá trị nào đó không. Ví dụ:

score = 75

case score
when 90..100
  puts "Excellent"
when 80..89
  puts "Good"
when 70..79
  puts "Average"
else
  puts "Below Average"
end

Kết quả của đoạn mã trên sẽ là "Average" vì giá trị của biến score nằm trong khoảng từ 70 đến 79.

Kết luận

Cấu trúc "case" và "when" trong Ruby là một công cụ mạnh mẽ giúp lập trình viên kiểm soát luồng chương trình một cách gọn gàng và hiệu quả. Với cú pháp đơn giản, khả năng mở rộng với nhiều trường hợp kiểm tra, và tính năng sử dụng phạm vi, nó xứng đáng là một phần quan trọng trong bộ công cụ lập trình của bất kỳ ai làm việc với Ruby.

Comments