Menu
CoddyTech

when với nhiều giá trị

Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 39 trên 56.

Một mệnh đề when có thể khớp với nhiều giá trị, được phân tách bằng dấu phẩy. Nhánh sẽ chạy nếu đối tượng được so sánh bằng với bất kỳ giá trị nào trong số đó.

day = "Sat"
kind = case day
       when "Sat", "Sun"                          then "weekend"
       when "Mon", "Tue", "Wed", "Thu", "Fri"  then "weekday"
       end
puts kind   # cuối tuần

Cách này gọn hơn nhiều so với việc nối các toán tử || trong câu lệnh if/elsif.

Bạn cũng có thể kết hợp nhiều kiểu giá trị trong một when: chuỗi (string), dải giá trị, mẫu regex, tất cả đều là những thứ phản hồi với ===:

def describe(x)
  case x
  when 0, nil       then "empty"
  when 1..9         then "small"
  when 10..99       then "medium"
  when /^huge:/i    then "flagged huge"
  end
end

Hãy chọn cách viết giúp bạn dễ nhìn ra từng nhánh ngay lập tức.

challenge icon

Thử thách

Dễ

Đọc một ký tự (một dòng đầu vào). Dùng case với các nhánh when có nhiều giá trị để in ra một trong các kết quả sau:

  • vowel: đầu vào là một trong các ký tự a, e, i, o, u (không phân biệt chữ hoa chữ thường, trước tiên hãy chuyển đầu vào thành chữ thường)
  • digit: đầu vào là một trong các ký tự 0..9 (dùng một khoảng)
  • punctuation: đầu vào là một trong các ký tự ., ,, !, ?
  • other: mọi trường hợp khác

Coi đầu vào là một chuỗi gồm một ký tự. Kiểm tra nhánh chữ số bằng một khoảng như "0".."9".

Với đầu vào E, đầu ra là vowel; với 7, đầu ra là digit; với !, đầu ra là punctuation.

Tự làm thử

ch = gets.chomp

# TODO: dùng case ch.downcase ... với các nhánh when có nhiều giá trị
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng xử lý

Tự luyện tập: Trình biên dịch Ruby online