Bounded
Bounded — это класс типов, который определяет минимальное и максимальное значение для определённого типа.
Он предоставляет методы для получения этих границ, что позволяет работать с типами, которые имеют ограниченный диапазон значений.
Bounded применяется в различных сценариях, где важно знать границы значений типа. Вот несколько примеров:
- Работа с числами:
Boundedможет использоваться для определения минимального и максимального значения числовых типов, таких какInt,Longи других. - Символы: Для типа
Charможно определить минимальное и максимальное значение, например, минимальный и максимальный символ в таблице Unicode. - Пользовательские типы: Если у вас есть собственный тип данных,
вы можете реализовать для него экземпляр
Bounded, чтобы определить его границы. - Алгоритмы: В алгоритмах, которые работают с ограниченными диапазонами значений,
Boundedможет использоваться для проверки границ.
Формальное определение
Bounded — это класс типов, расширяющий тип Order
и определяющий минимальное и максимальное значение для определённого типа.
Bounded предоставляет методы для получения этих границ (min и max),
что позволяет работать с типами, имеющими ограниченный диапазон значений.
Законы
Для корректной реализации Bounded должны выполняться следующие законы:
- Минимальное значение: Для любого значения
xтипаA,xдолжно быть больше или равноmin(x >= min). - Максимальное значение: Для любого значения
xтипаA,xдолжно быть меньше или равноmax(x <= max).
Определение в виде кода на Scala
trait Equal[F]:
def equal(a1: F, a2: F): Boolean
enum Ordering:
case LT
case EQ
case GT
trait Order[F] extends Equal[F]:
def order(x: F, y: F): Ordering
trait Bounded[F] extends Order[F]:
def min: F
def max: F
- Типовой параметр
F:Boundedпараметризуется типомF, для которого определяются границы. - Метод
min: Возвращает минимальное значение типаF. - Метод
max: Возвращает максимальное значение типаF.
Схема
classDiagram
class Equal~A~{
+equal(x: A, y: A) Boolean
}
class Ordering{
<<enumeration>>
LT
EQ
GT
}
class Order~A~{
+order(x: A, y: A) Ordering
}
Ordering .. Order
Equal <|-- Order
class Bounded~A~{
+min: A
+max: A
}
Order <|-- Bounded
Ссылки: