do..end và dấu ngoặc nhọn
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 16 trên 56.
Ruby cung cấp cho bạn hai cách viết khối lệnh. Chúng có cùng ý nghĩa, nhưng mỗi cách phù hợp với một trường hợp sử dụng riêng.
do...end dùng cho các khối nhiều dòng:
[1, 2, 3].each do |n|
doubled = n * 2
puts "#{n} -> #{doubled}"
endDấu ngoặc nhọn { ... } dùng cho các khối một dòng, ngắn và có dạng biểu thức:
[1, 2, 3].each { |n| puts n * 2 }Hai kiểu này có độ ưu tiên hơi khác nhau, nhưng quy tắc bạn cần nhớ là quy tắc về cách viết: dùng dấu ngoặc nhọn cho câu lệnh trên một dòng, do...end cho câu lệnh nhiều dòng.
Cả hai dạng đều có thể trả về một giá trị. Biểu thức cuối cùng trong khối lệnh sẽ được truyền lại cho các phương thức như map:
[1, 2, 3].map { |n| n * 10 } # [10, 20, 30]
[1, 2, 3].map do |n|
n * 10
end # [10, 20, 30]Thử thách
DễĐọc đầu vào gồm một danh sách số nguyên được phân tách bằng dấu phẩy. In ra hai dòng:
- Mỗi số sau khi nhân đôi, nối với
,. Dùng dạng ngoặc nhọn củamap. - Chuỗi
"<n> squared is <n*n>"cho mỗi số, mỗi chuỗi trên một dòng. Dùng dạngdo...endcủaeach.
Với đầu vào 1,2,3, đầu ra là:
2, 4, 6
1 squared is 1
2 squared is 4
3 squared is 9Tự làm thử
numbers = gets.chomp.split(",").map(&:to_i)
# TODO: dòng 1, nhân đôi các số, dùng map với dấu ngoặc nhọn, nối các kết quả bằng ", "
# TODO: từ dòng 2 đến dòng n, bình phương các số, dùng each với cú pháp do...end
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