Bounded

Bounded — это класс типов, который определяет минимальное и максимальное значение для определённого типа. Он предоставляет методы для получения этих границ, что позволяет работать с типами, которые имеют ограниченный диапазон значений.

Bounded применяется в различных сценариях, где важно знать границы значений типа. Вот несколько примеров:

Формальное определение

Bounded — это класс типов, расширяющий тип Order и определяющий минимальное и максимальное значение для определённого типа. Bounded предоставляет методы для получения этих границ (min и max), что позволяет работать с типами, имеющими ограниченный диапазон значений.

Законы

Для корректной реализации Bounded должны выполняться следующие законы:

Определение в виде кода на 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
  1. Типовой параметр F: Bounded параметризуется типом F, для которого определяются границы.
  2. Метод min: Возвращает минимальное значение типа F.
  3. Метод 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 

Ссылки: