Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

Ruby Infinity ทำความเข้าใจ: ทำงานยังไง และ ทำไมถึงสำคัญ

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 บทความนี้ให้คนอื่นได้ประโยชน์ — ขอบคุณที่อ่านครับ!