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

Ruby Infinity:มันทำงานอย่างไรและทำไมจึงสำคัญ

อินฟินิตี้ในทับทิมคืออะไร

เป็นสิ่งที่มีจุดเริ่มต้นแต่ไม่มีจุดจบ

ใน Ruby เราสามารถแสดงแนวคิดเรื่องอินฟินิตี้ได้ ด้วย Float::INFINITY ค่าคงที่

คุณอาจสงสัยว่าสิ่งนี้มีประโยชน์อย่างไร

ให้ฉันอธิบายด้วยตัวอย่าง!

อินฟินิตี้เป็นผลมาจากการดำเนินการทางคณิตศาสตร์

Ruby ส่งคืน Infinity วัตถุอันเป็นผลมาจากการดำเนินการทางคณิตศาสตร์บางอย่าง

ตัวอย่างเช่น :

คุณอาจคุ้นเคยกับข้อผิดพลาด "หารด้วยศูนย์"

นี่เลย :

1/0
# ZeroDivisionError: divided by 0

แต่…

หากคุณใช้ทุ่น คุณจะได้อย่างอื่น:

1/0.0
# Infinity

Infinity !

แต่นั่นไม่ใช่ทั้งหมด

หากคุณลองแบ่ง 0 โดย 0.0 แล้วคุณจะพบกับความคุ้มค่าอีกขั้น

ลองดูสิ :

0/0.0
# NaN

NaN นี้คืออะไร

หมายถึง “ไม่ใช่ตัวเลข” และเท่าที่ฉันรู้ นี่เป็นที่เดียวใน Ruby ที่คุณจะพบค่านี้

ทำไมถึงเป็นแบบนี้

เป็นส่วนหนึ่งของข้อกำหนด IEEE 754 ซึ่งอธิบายว่าการดำเนินการจุดทศนิยมควรเป็นอย่างไร

แต่มีวิธีที่เกี่ยวข้องบางอย่าง :

  • nan?
  • finite?
  • infinite?

คุณสามารถใช้วิธีการเหล่านี้เพื่อตรวจสอบค่าพิเศษได้

วิธีการเหล่านี้มีอยู่ใน Floats

ตั้งแต่ Ruby 2.4 คุณสามารถใช้ finite? &infinite? ด้วยจำนวนเต็ม

วิธีสร้างช่วงอนันต์

ได้เลย

นั่นน่าสนใจ… มาดูตัวอย่างเพิ่มเติมกันเถอะ

ตอนนี้มีเรนจ์แล้ว!

นี่คือช่วงอนันต์ :

(1..Float::INFINITY).take(10)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

ซึ่งจะมีประโยชน์เมื่อคุณไม่ทราบจุดสิ้นสุดของช่วงล่วงหน้า

ปัญหาหนึ่ง…

ใช้ได้กับตัวเลขเป็นค่าเริ่มต้นเท่านั้น

ตัวอย่าง :

("a"..Float::INFINITY)
# ArgumentError: bad value for range

วิธีแก้ปัญหาคืออะไร

ด้วย Ruby 2.6 คุณทำได้ :

("a"..).take(5)
# ["a", "b", "c", "d", "e"]

ใช่ นั่นไม่ใช่ความผิดพลาด! ช่วงนี้ไม่มีค่าสิ้นสุด มีเพียงค่าเริ่มต้นของ "a" แล้วสองจุด .. เพื่อให้เป็นช่วงที่ไม่มีที่สิ้นสุด

นี่คือรูปแบบใหม่

ใช้ Ruby 2.6+ หากคุณต้องการให้มันทำงาน

อนันต์เป็นค่าสูงสุดและต่ำสุด

การใช้งานจริงอีกอย่างสำหรับ Infinity ?

ก็…

มันใหญ่ที่สุด (Infinity ) &เล็กที่สุด (-Infinity ) หมายเลข Ruby.

คุณสามารถใช้ค่านี้เป็นค่าเริ่มต้นได้

นี่คือตัวอย่าง :

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 ซึ่งเป็นโครงการโอเพ่นซอร์ส

นี่คือวิธีการทำงาน :

เรากำลังพยายามหาขนาดอาร์เรย์ที่เล็กที่สุด แต่เราต้องการค่าเริ่มต้นสำหรับสิ่งนั้นเพราะใช้ nil จะทำให้คุณมีข้อผิดพลาด

คุณสามารถพิมพ์ ตัวเลขใหญ่ และหวังว่าจะพอเพียง

หรือคุณสามารถใช้ Float::INFINITY โดยรู้ว่านั่นคือจำนวนที่มากที่สุด

สรุป

คุณได้เรียนรู้เกี่ยวกับอินฟินิตี้ใน Ruby แล้ว มันคืออะไร อาจปรากฏขึ้นที่ใด และใช้งานอย่างไร

โปรดแชร์บทความนี้เพื่อให้ผู้คนได้รับประโยชน์มากขึ้น

ขอบคุณสำหรับการอ่าน!