Computer >> Máy Tính >  >> Lập trình >> Ruby

Tìm hiểu các từ khóa tiếp theo &phá vỡ của Ruby

Từ khóa, như tiếp theo & ngắt là một phần của ngôn ngữ lập trình Ruby, vì vậy nếu bạn muốn hiểu đầy đủ về Ruby, bạn cần biết chúng hoạt động như thế nào.

Chúng được sử dụng để làm gì?

Chà, trong Ruby, chúng ta có tất cả các loại vòng lặp.

Thích :

  • trong khi
  • cho đến khi
  • từng

Khi viết một vòng lặp, bạn có thể muốn bỏ qua một lần lặp lại hoặc kết thúc sớm vòng lặp.

Đó là nơi next &break từ khóa xuất hiện!

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

Từ khóa tiếp theo của Ruby (Bỏ qua lặp lại)

next từ khóa cho phép bạn bỏ qua một lần lặp lại.

Ví dụ :

Giả sử bạn đang đếm các chuỗi.

Và vì lý do nào đó, bạn không muốn đếm các chuỗi có kích thước là 4.

Bạn có thể làm điều này :

strings = ["one", "two", "four", "five"]

strings.inject(0) do |sum, str|
  next if str.size == 4

  sum + str.size
end

# nil

Mã này sẽ KHÔNG hoạt động.

Bạn nhận được không.

Tại sao?

Bởi vì next trả về nil theo mặc định, giống như gọi return không có giá trị trả lại.

Như bạn có thể biết…

Sử dụng inject lấy giá trị cuối cùng được trả về bởi khối &trở thành đối số đầu tiên của lần lặp tiếp theo.

Nói cách khác, sum trở thành nil .

Giải pháp?

Thay đổi next dòng này:

next sum if str.size == 4

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

Nếu hiệu suất không phải là mức ưu tiên cao nhất (thường thì không), bạn có thể lọc trước mảng để tránh phải sử 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ử bậc ba.

Tôi nghĩ Ruby cung cấp cho bạn đủ công cụ để tránh phải sử dụng next .

Sử dụng chúng!

Từ khóa Ruby Break (Thoát vòng lặp sớm)

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

Nó có thể được sử dụng để quay lại sớm từ một vòng lặp.

Tại sao không sử dụng return từ khóa? Bởi 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 một vòng lặp không điều kiện.

Như thế này :

count = 0

loop do
  break if count == 10

  puts count

  count += 1
end

Thao tác này sẽ in ra một danh sách các số, từ 0 đến 9.

Một giải pháp thay thế tốt hơn sẽ là sử dụng times phương thức, upto hoặc một phạm vi cộng với mỗi phương thức.

Ví dụ :

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

&method(:puts) này chỉ là một phím tắt để gọi puts cho mỗi số.

Tránh nhầm lẫn:Tiếp theo là một phương pháp Ruby

Chỉ vì một cái gì đó tồn tại dưới dạng từ khóa, điều đó không có nghĩa là nó không thể được sử dụng làm tên phương thức.

Một vài lớp trong Ruby triển khai next như một phương pháp.

Giống như String &Integer .

Ví dụ :

1.next
# 2

Kết quả không đáng ngạc nhiên, phải không?

Còn điều này thì sao :

"zz".next
# "aaa"

Điều đó thú vị hơn một chút!

Điều này hoạt động như thế nào?

Mọi lớp đều triển khai phiên bản next của nó , chứa logic cho giá trị tiếp theo.

Đối với Số nguyên , đây chỉ là +1 .

Đối với Chuỗi , nó tăng ký tự cuối cùng lên một (tiếp theo trong bảng chữ cái / +1 đối với số), sau đó nếu có chuyển tiếp (9 -> 0 , z -> a ), nó sẽ tăng ký tự tiếp theo ở bên trái.

Tóm tắt

Bạn đã học về next &break từ khóa trong Ruby, cách chúng giúp bạn bỏ qua các lần lặp lại hoặc dừng một vòng lặp sớm.

Bây giờ đến lượt bạn thực hành các kỹ năng Ruby của mình 🙂

Cảm ơn vì đã đọc!