Ôn tập: Máy tính an toàn
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 47 trên 56.
Hãy tạo một máy tính nhỏ có thể xử lý đầu vào không hợp lệ bằng cách kết hợp raise, nhiều mệnh đề rescue và ensure.
Thử thách
Trung bìnhĐịnh nghĩa phương thức calc(a, op, b) để:
- Ném ra
ArgumentErrorvới thông báo"unknown operator"nếuopkhông phải một trong các toán tử+,-,*,/ - Thực hiện phép tính tương ứng trong trường hợp còn lại (dùng phép tính số nguyên cho
/)
Sau đó đọc ba dòng từ đầu vào, a, op, b: rồi gọi calc bên trong begin / rescue / ensure:
- Nếu thành công, in ra
<a> <op> <b> = <result> - Nếu gặp
ArgumentError, in raBad operator - Nếu gặp
ZeroDivisionError, in raCannot divide by zero - Trong
ensure, luôn in ra--- end ---
Dùng Integer(...) để phân tích a và b trong cùng khối begin, để đầu vào không phải số nguyên cũng rơi vào Bad operator (ArgumentError bao gồm cả hai trường hợp).
Với đầu vào 6 / * / 7, đầu ra là:
6 * 7 = 42
--- end ---Với đầu vào 10 / / / 0:
Cannot divide by zero
--- end ---Tự làm thử
# TODO: định nghĩa calc(a, op, b), phát sinh ArgumentError khi op không xác định
raw_a = gets.chomp
op = gets.chomp
raw_b = gets.chomp
# TODO: dùng begin/rescue/ensure như mô tả
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