Menu
CoddyTech

Trường hợp với lớp và Regex

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

Bạn đã dùng case với các phạm vi. Câu lệnh này cũng đối chiếu với các lớp và biểu thức chính quy: cả hai đều thông qua toán tử === mà when gọi ngầm.

Dựa vào lớp để rẽ nhánh theo loại giá trị bạn nhận được:

def describe(value)
  case value
  when Integer then "a whole number"
  when Float   then "a decimal"
  when String  then "some text"
  else              "something else"
  end
end

puts describe(42)      # một số nguyên
puts describe(3.14)    # một số thập phân
puts describe("hi")    # một đoạn văn bản

Dùng regex để rẽ nhánh dựa trên hình dạng của chuỗi, chẳng hạn như số điện thoại, email hoặc ngày tháng:

def kind_of(text)
  case text
  when /^\d+$/        then "all digits"
  when /@/            then "looks like an email"
  when /^[A-Z]/       then "starts with a capital"
  else                     "other"
  end
end

Cách này gọn gàng hơn nhiều so với việc nối các lời gọi is_a? hoặc match? trong if/elsif.

challenge icon

Thử thách

Dễ

Đọc một dòng đầu vào. Dùng câu lệnh case để in ra một trong các nhãn sau, dựa trên hình thức của đầu vào:

  • Chỉ gồm các chữ số, number
  • Có chứa @: email
  • Bắt đầu bằng chữ cái viết hoa, name
  • Các trường hợp khác, unknown

Kiểm tra các quy tắc theo thứ tự đã liệt kê (vì vậy 123 là number, không phải unknown; kevin@coddy.tech là email; Alice là name).

Với đầu vào kevin@coddy.tech, đầu ra là email.

Tự làm thử

input = gets.chomp

# TODO: case input ... when /^\d+$/, /@/, /^[A-Z]/ ... else ... end
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