Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Từ Khóa 'next' Và 'break' Trong Ruby: Hướng Dẫn Hoàn Chỉnh

Từ khóa, như next & break là một phần của ngôn ngữ Ruby, nên nếu bạn muốn hiểu hoàn toàn Ruby bạn cần biết chúng hoạt động như thế nào.

Chúng dùng để làm gì? Trong Ruby, chúng ta có mọi loại vòng lặp. Như: while, until, each. Khi viết vòng lặp, bạn có thể muốn bỏ qua một vòng lặp, hoặc kết thúc vòng lặp sớm. Đó là nơi từ khóa next & break xuất hiện!

Hãy tìm hiểu cách dùng chúng.

Từ Khóa Next Trong Ruby (Bỏ Qua Vòng Lặp)

next cho phép bạn bỏ qua một lần lặp.

Ví dụ: Giả sử bạn đang đếm chuỗi. Và vì lý do nào đó bạn không muốn đếm chuỗi có độ dài 4.

Bạn có thể làm:

 strings = ["one", "two", "four", "five"]
strings.inject(0) do |sum, str|
  next if str.size == 4
  sum + str.size
end
# nil 

Code này KHÔNG hoạt động. Bạn nhận được nil.

Tại sao? Vì next trả về nil mặc định, giống như gọi return không có giá trị trả về. Với inject, giá trị cuối cùng block trả về trở thành đối số đầu tiên của vòng lặp tiếp theo. Nghĩa là sum trở thành nil.

Giải pháp? Thay dòng next thành:

 next sum if str.size == 4 

Điều này làm next trả về giá trị sum.

Nếu hiệu suất không phải ưu tiên cao nhất (thường không), bạn có thể pre-filter mảng để tránh dùng next.

Hoặc thậm chí tốt hơn:

 strings = ["one", "two", "four", "five"]
strings.inject(0) { |sum, str| str.size == 4 ? sum : sum + str.size }
# 6 

Đây là toán tử ba ngõ (ternary). Tôi nghĩ Ruby cho đủ công cụ để tránh dùng next. Hãy dùng chúng!

Từ Khóa Break Trong Ruby (Thoát Vòng Lặp Sớm)

break giống next, nhưng nó kết thúc vòng lặp & trả về giá trị, thay vì chỉ bỏ qua một lần lặp. Dùng cho early return từ vòng lặp.

Tại sao không dùng return? Vì nó sẽ thoát khỏi phương thức hiện tại, không chỉ vòng lặp.

Hoặc để kết thúc vòng lặp vô điều kiện.

Như sau:

 count = 0
loop do
  break if count == 10
  puts count
  count += 1
end 

In ra số từ 0 đến 9. Thay thế tốt hơn là dùng phương thức times, upto, hoặc range cộng each.

Ví dụ:

 0.upto(9).each(&method(:puts)) 

&method(:puts) chỉ là shortcut gọi puts cho mỗi số.

Tránh Nhầm Lẫn: Next Là Phương Thức Ruby

Chỉ vì tồn tại như từ khóa, không có nghĩa là không dùng làm tên phương thức. Một vài lớp Ruby implement next như phương thức. Như String & Integer.

Ví dụ:

 1.next # 2 

Kết quả không ngạc nhiên, đúng không? Thử cái này:

 "zz".next # "aaa" 

Thú vị hơn! Cơ chế hoạt động? Mỗi lớp triển khai phiên bản next riêng, chứa logic cho giá trị tiếp theo. Với Integer, chỉ là +1. Với String, nó tăng ký tự cuối lên một (tiếp theo trong alphabet / +1 cho số), nếu có carry (9 -> 0, z -> a), nó tăng ký tự bên trái.

Tóm Tắt

Bạn đã học về từ khóa next & break trong Ruby, cách chúng giúp bỏ qua lần lặp, hoặc dừng vòng lặp sớm. Bây giờ đến lượt bạn thực hành kỹ năng Ruby 🙂 Cảm ơn bạn đã đọc!