Vô Cực Trong Ruby Là Gì?
Đó là thứ có điểm bắt đầu nhưng không có điểm kết. Trong Ruby, chúng ta biểu diễn khái niệm vô cực bằng hằng số Float::INFINITY.
Bạn có thể thắc mắc điều này hữu ích như thế nào. Hãy giải thích qua ví dụ!
Vô Cực Là Kết Quả Của Phép Toán Số Học
Ruby trả về đối tượng Infinity kết quả của một số phép toán. Ví dụ: Bạn có thể quen với lỗi "chia cho 0". Đây là nó:
1/0 # ZeroDivisionError: divided by 0
Nhưng... Nếu dùng float, bạn nhận được thứ khác:
1/0.0 # InfinityInfinity! Nhưng chưa hết. Nếu chia
0 cho 0.0, nhận giá trị đặc biệt khác. Xem:
0/0.0 # NaN
NaN là gì? Nghĩa là "Not a Number", và据我所知, đây là nơi duy nhất trong Ruby tìm thấy giá trị này. Tại sao lại có cái này? Phần của spec IEEE 754, quy định hành vi phép toán dấu phẩy động. Có vài method liên quan:
nan?finite?infinite?
Dùng để check giá trị đặc biệt. Các method này có trên Float. Từ Ruby 2.4 bạn cũng dùng finite? & infinite? với Integer.
Cách Tạo Range Vô Cực
Ok. Thú vị... Xem thêm ví dụ với Range! Range vô cực:
(1..Float::INFINITY).take(10) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
Hữu ích khi không biết cuối range trước. Một vấn đề... Chỉ hoạt động với số làm giá trị bắt đầu. Ví dụ:
("a"..Float::INFINITY) # ArgumentError: bad value for range
Giải pháp? Với Ruby 2.6, bạn làm:
("a"..).take(5) # ["a", "b", "c", "d", "e"]
Đúng, không lỗi! Range này không có giá trị kết thúc, chỉ giá trị bắt đầu "a", rồi hai chấm .. làm range không bao giờ kết thúc. Cú pháp mới. Dùng Ruby 2.6+ để chạy.
Vô Cực Làm Giá Trị Max & Min
Một ứng dụng thực tế khác cho Infinity? Nó là số lớn nhất (Infinity) & nhỏ nhất (-Infinity) trong Ruby. Dùng làm giá trị khởi tạo. Ví dụ:
def smallest_percent_size(style, ary_size)
@smallest_percent ||= Float::INFINITY
if style == :percent && ary_size < @smallest_percent
@smallest_percent = ary_size
end
@smallest_percent
end
Code này từ Rubocop, project open-source. Cách hoạt động: Tìm size mảng nhỏ nhất, cần giá trị khởi tạo vì dùng nil báo lỗi. Bạn gõ số LỚN & hy vọng đủ. Hoặc dùng Float::INFINITY, biết đó là số lớn nhất có thể.
Tóm Tắt
Bạn đã học về vô cực trong Ruby, nó là gì, nơi nó xuất hiện & cách dùng. Hãy chia sẻ bài viết để nhiều người hưởng lợi. Cảm ơn bạn đã đọc!