if / unless nội tuyến
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 41 trên 56.
Ruby cho phép bạn đặt if và unless ở cuối một câu lệnh duy nhất, như một dạng bổ nghĩa trên một dòng. Cách viết này gần giống tiếng Anh.
puts "Adult" if age >= 18
puts "Save your work" unless savedĐiều này cũng giống như:
if age >= 18
puts "Adult"
end
unless saved
puts "Save your work"
endDạng viết trên cùng một dòng rất hữu ích cho các kiểm tra kiểu bảo vệ ở đầu phương thức hoặc các cập nhật có điều kiện chỉ thực hiện một lần trong vòng lặp:
return if name.nil? || name.empty?
counts = Hash.new(0)
words.each do |w|
counts[w] += 1 unless w.start_with?("#")
endGiống như toán tử ba ngôi, hãy dùng các từ bổ nghĩa nội tuyến cho câu lệnh ngắn. Nếu phần thân có nhiều hơn một dòng, hãy viết khối if thực sự.
Thử thách
DễĐọc một danh sách số nguyên được phân tách bằng dấu phẩy. Với mỗi số, chỉ in một dòng khi số đó khác 0:
- In
positive: <n>ifn > 0 - In
negative: <n>unlessn >= 0
Cả hai dòng đều phải dùng dạng bổ nghĩa nội tuyến, không dùng khối if hay else. Sau vòng lặp, in Skipped zeros: <count>, trong đó count là số lượng số 0, cũng được tính mà không dùng khối if (dùng count).
Với đầu vào 3,-2,0,5,0, đầu ra là:
positive: 3
negative: -2
positive: 5
Skipped zeros: 2Tự làm thử
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: in ra từng số bằng `if` / `unless` viết trên cùng một dòng
# TODO: dùng count để in ra Skipped zeros: <n>
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ệu8Ra quyết định nâng cao
Trường hợp với lớp và Regexwhen với nhiều giá trịToán tử ba ngôiif / unless nội tuyếnÔn tập: bộ phân loại điểmTự luyện tập: Trình biên dịch Ruby online