Phạm vi trong case / when
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 8 trên 56.
Phạm vi phát huy hiệu quả trong câu lệnh case của Ruby. Nhiều ngôn ngữ cần một chuỗi if/elsif kèm các toán tử so sánh, còn Ruby cho phép bạn so khớp trực tiếp một giá trị với các phạm vi.
score = 78
grade = case score
when 90..100 then "A"
when 80..89 then "B"
when 70..79 then "C"
when 60..69 then "D"
else "F"
end
puts grade # CẨn bên dưới, when 70..79 dùng toán tử === của phạm vi, tương đương với (70..79).include?(score).
Dạng case ngắn hơn, dễ đọc hơn và viết nhanh hơn một chuỗi if/elsif dài.
Thử thách
DễĐọc danh sách số nguyên là các độ tuổi, phân tách bằng dấu phẩy. Với mỗi độ tuổi, hãy phân loại bằng câu lệnh case theo các khoảng:
0..12:Child13..19:Teen20..64:Adult65trở lên:Senior- Các giá trị khác (số âm): bỏ qua, không đưa vào báo cáo
In một dòng đếm cho mỗi nhóm có số lượng khác không, theo đúng thứ tự sau: Child, Teen, Adult, Senior. Bỏ qua các nhóm không có người nào. Sau các dòng đếm, in Skipped: <n>, trong đó n là số độ tuổi âm (không hợp lệ).
Với đầu vào 5,15,30,70,-3,40,12, đầu ra là:
Child: 2
Teen: 1
Adult: 2
Senior: 1
Skipped: 1Tự làm thử
ages = gets.chomp.split(",").map(&:to_i)
# TODO: dùng case và các khoảng giá trị để phân loại từng độ tuổi, đếm số lượng theo từng nhóm, rồi in báo cáo
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ý
1Tìm hiểu sâu về chuỗi
Tổng quan về phương thức chuỗiNội suy chuỗiDuyệt qua chuỗiTách và nối chuỗiÔn tập: Đan chuỗi4Khối lệnh, Proc và lambda
Khối lệnh là gì?do..end và dấu ngoặc nhọnTừ khóa yieldTham số của khối lệnhProc và lambdaÔn tập: bộ lặp tùy chỉnh7Hash, phần 2
Hash.new với giá trị mặc địnhLặp qua HashHash lồng nhauGộp và chuyển đổiÔn tập: Bộ đếm tần suất10Dự án: Hồ sơ học sinh
Tổng quan dự ánThêm học sinh2Phạm vi
Phạm vi là gì?Các phương thức của phạm viPhạm vi trong case / whenÔn tập: luyện tập với phạm vi5Sức mạnh của Enumerable
select và rejectNối chuỗi mapreduce / injectcount, all?, any?, none?group_by và partitionsort_by, min_by, max_byÔn tập: quy trình dữ liệuTự luyện tập: Trình biên dịch Ruby online