Khối lệnh là gì?
Thuộc phần Logic và luồng xử lý trong hành trình Ruby của Coddy. Bài học 15 trên 56.
Bạn đã viết các khối lệnh trước đó. Mỗi lần bạn viết each do |x| ... end, phần nằm giữa do và end là một khối lệnh (block): một đoạn code được truyền vào một phương thức.
[1, 2, 3].each do |n|
puts n * 2
endỞ đây, each là một phương thức của mảng, còn do |n| ... end là khối lệnh. each chạy khối lệnh một lần cho mỗi phần tử và truyền phần tử đó vào n.
Block không phải là đối tượng riêng biệt được lưu trong biến, mà gắn trực tiếp với lời gọi phương thức. Một phương thức có nhận block hoặc không, và hầu hết các phương thức lặp (each, map, select, times) đều được thiết kế để nhận một block.
3.times do |i|
puts "hi #{i}"
endGọi một phương thức mà không truyền khối lệnh sẽ làm thay đổi cách nó hoạt động. [1,2,3].map khi không có khối lệnh sẽ trả về một bộ liệt kê thay vì một mảng đã được biến đổi, vì vậy khối lệnh là một phần trong ý nghĩa của phương thức.
Thử thách
Người mớiĐọc một số nguyên n từ đầu vào. Dùng phương thức times với một khối lệnh để in ra thông báo Iteration <i> cho mỗi giá trị của i từ 0 đến n - 1.
Với đầu vào là 3, đầu ra là:
Iteration 0
Iteration 1
Iteration 2Tự làm thử
n = gets.to_i
# TODO: dùng n.times với một khối lệnh (block) để in ra mỗi lần lặp (iteration)
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