Infinity ใน Ruby คืออะไร? — สิ่งที่มีจุดเริ่มแต่ไม่มีจุดจบ
ใน Ruby เราสามารถแสดงแนวคิด Infinity ด้วย Constant Float::INFINITY
อาจสงสัยว่ามันมีประโยชน์ยังไง — มาอธิบายด้วยตัวอย่าง!
Infinity เป็นผลลัพธ์จาก Arithmetic Operations
Ruby คืน Object Infinity จากบาง Math Operations
เช่น: คุ้นเคย "Division by Zero" Error
มันคือ:
1/0 # ZeroDivisionError: divided by 0
แต่... ถ้าใช้ Float จะได้อย่างอื่น:
1/0.0 # Infinity
Infinity!
ยังไม่หมด — ถ้า 0 หาร 0.0 ได้ค่าพิเศษอีกค่า
ดูสิ:
0/0.0 # NaN
NaN คืออะไร? "Not a Number" — จุดเดียวใน Ruby ที่เจอค่านี้ (ที่รู้)
ทำไมมันเป็น Thing? เป็นส่วนของ IEEE 754 Spec — กำหนด Floating-point Operations ควรทำงานยังไง
Btw มี Related Methods:
nan?finite?infinite?
เช็ค Special Values ได้ — Available on Floats, ตั้งแต่ Ruby 2.4 ใช้ finite? infinite? กับ Integers ได้
สร้าง Infinite Ranges
น่าสนใจ... มาดูตัวอย่างเพิ่มกับ Ranges!
Infinite Range:
(1..Float::INFINITY).take(10) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
ช่วยตอนไม่รู้ End ของ Range ล่วงหน้า — แต่ Problem: ใช้ได้แค่ Numbers เป็น Starting Value
ตัวอย่าง:
("a"..Float::INFINITY) # ArgumentError: bad value for range
โซลูชันคืออะไร? Ruby 2.6+ ทำได้:
("a"..).take(5) # ["a", "b", "c", "d", "e"]
ไม่ได้พลาด! Range นี้ไม่มี End Value แค่ Start "a" แล้วสองจุด .. ทำให้ Never-ending — Syntax ใหม่ ต้อง Ruby 2.6+
Infinity เป็น Maximum & Minimum Value
ประโยชน์ปฏิบัติอีกอย่างของ Infinity? — มันคือตัวเลข มากที่สุด (Infinity) และ น้อยที่สุด (-Infinity) ใน Ruby
ใช้เป็น Starting Value ได้
ตัวอย่าง:
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
โค้ดจาก Rubocop (Open-source) — หา Smallest Array Size ต้องมี Starting Value เพราะ nil Error — ใส่เลขใหญ่ "เดา" ว่าพอ หรือ用 Float::INFINITY รู้ว่ามันใหญ่สุด
Summary (สรุป)
คุณเรียนรู้ Infinity ใน Ruby — คืออะไร อาจเจอที่ไหน และใช้ยังไง
Share บทความนี้ให้คนอื่นได้ประโยชน์ — ขอบคุณที่อ่านครับ!