Это перевод оригинальной статьи от Jesus Castello.
Что такое бесконечность — infinity — в Ruby?
Это то, у чего есть начало, но нет конца.
В Ruby мы можем выразить эту концепцию бесконечности с помощью константы Float::INFINITY.
Вы можете быть поражены, насколько это бывает полезно.
Позвольте мне показать на примерах!
Infinity, как результат арифметических операций
Ruby возвращает объект Infinity, как результат определённых математических операций.
Например:
Вы, вероятно, знакомы с ошибкой «деление на ноль».
Вот она:
Но...
Если использовать вещественные числа, вы получите что-то вроде этого:
Infinity!
Но это ещё не всё.
Если попытаться поделить 0 на 0.0, вы получите другое специальное значение.
Вот, взгляните:
Что такое NaN?
Это значит «Not a Number» — «Не число» — и, насколько мне известно, это единственная возможность получить такое значение в Ruby.
Для чего это?
Это часть спецификации IEEE 754, которая объясняет, как должны себя вести операции с плавающей точкой.
Кстати, вот несколько связанных методов:
- nan?
- finite?
- infinite?
Вы можете их использовать для проверки на специальные значения.
Эти методы первоначально были доступны только для класса Float.
Но с версии Ruby 2.4 методы finite? и infinite? можно использовать и на экземплярах класса Integer.
Как создавать бесконечные диапазоны (Range)?
Ладно. Это всё интересно, но хотелось бы примеров.
Посмотрим на класс Range!
Это бесконечный диапазон:
Это может оказаться полезным, когда вы не знаете пределов диапазона заранее.
Правда, есть одна проблема…
Это работает только с числами в качестве первоначального значения.
Пример:
Есть ли решение?
Начиная с Ruby 2.6 вы можете делать так:
Infinity как максимальное и минимальное значение
Есть другое практическое применение для Infinity?
Ну…
Это самое большое (Infinity) и самое маленькое (-Infinity) число в Ruby.
Вы можете использовать это как начальное значение.
Вот пример:
Это код из открытого проекта Rubocop.
Вот как это работает:
Мы пытаемся найти наименьший размер массива, но нам нужно стартовое значение для этого, потому что использование nil может привести к ошибке.
Вы можете назначить какое-нибудь большое число и надеяться, что этого будет достаточно.
Или вы можете использовать Float::INFINITY зная, что это самое больше число из всех возможных.
Итоги
Вы узнали о бесконечности в Ruby: что это, где она может проявиться и как её использовать.
Спасибо, что дочитали до конца!
#ruby #infinity #руби #бесконечность