Documentation
¶
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ( // UpperBelowLowerError возникает, когда верхняя граница меньше или равна нижней. // Например, диапазон [10, 5] является некорректным. UpperBelowLowerError = errors.New("upper limit is below the lower limit") // OpenBoundError возникает, когда обе границы диапазона являются открытыми (OPEN). // Диапазон вида (-∞, +∞) не имеет смысла, так как включает все возможные значения. OpenBoundError = errors.New("both borders are open") )
Ошибки, возвращаемые при создании диапазона.
Functions ¶
This section is empty.
Types ¶
type BoundType ¶
type BoundType uint8
BoundType представляет тип границы.
const ( // INCLUSIVE — включающая граница. Значение границы входит в диапазон. // Пример: [5, 10] — число 5 входит в диапазон. INCLUSIVE BoundType = iota // EXCLUSIVE — исключающая граница. Значение границы не входит в диапазон. // Пример: (5, 10) — число 5 не входит в диапазон. EXCLUSIVE // OPEN — открытая граница. Означает отсутствие ограничения (бесконечность). // Для нижней границы OPEN означает -∞, для верхней — +∞. OPEN )
BoundType определяет тип границы диапазона.
type Bounder ¶ added in v1.0.0
type Bounder[T Numeric] interface { // Type возвращает тип границы: INCLUSIVE, EXCLUSIVE или OPEN. Type() BoundType // Value возвращает числовое значение границы. // Для OPEN границы возвращает экстремальное значение типа (minValue или maxValue). Value() T }
Bounder определяет базовый контракт для любой границы диапазона. Предоставляет доступ к типу и значению границы.
type LowerBounder ¶ added in v1.0.0
type LowerBounder[T Numeric] interface { Bounder[T] // IsAboveLowerBound проверяет, находится ли значение выше нижней границы. // Поведение зависит от типа границы: // - INCLUSIVE: val >= граница // - EXCLUSIVE: val > граница // - OPEN: всегда true IsAboveLowerBound(T) bool }
LowerBounder определяет контракт для нижней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.
func NewExclusiveLowerBoundValue ¶ added in v1.0.0
func NewExclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]
NewExclusiveLowerBoundValue создаёт новую исключающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.
Пример:
lower := NewExclusiveLowerBoundValue(5) // нижняя граница: значение > 5
func NewInclusiveLowerBoundValue ¶ added in v1.0.0
func NewInclusiveLowerBoundValue[T Numeric](value T) LowerBounder[T]
NewInclusiveLowerBoundValue создаёт новую включающую нижнюю границу. Возвращает интерфейс LowerBounder для использования в качестве нижней границы диапазона.
Пример:
lower := NewInclusiveLowerBoundValue(5) // нижняя граница: значение >= 5
func NewOpenLowerBoundValue ¶ added in v1.0.0
func NewOpenLowerBoundValue[T Numeric]() LowerBounder[T]
NewOpenLowerBoundValue создаёт новую открытую нижнюю границу. Открытая граница означает отсутствие ограничения снизу (-∞). Возвращает интерфейс LowerBounder.
Пример:
lower := NewOpenLowerBoundValue[int]() // нижняя граница: -∞
type Numeric ¶ added in v1.0.0
type Numeric interface {
~int | ~int8 | ~int16 | ~int32 | ~int64 |
~uint | ~uint8 | ~uint16 | ~uint32 | ~uint64 |
~float32 | ~float64
}
Numeric определяет интерфейс всех числовых типов, которые могут быть использованы в диапазонах. Включает целые (знаковые и беззнаковые) и числа с плавающей точкой.
Поддерживаемые типы:
- int, int8, int16, int32, int64
- uint, uint8, uint16, uint32, uint64
- float32, float64
type Range ¶
type Range[T Numeric] struct { // contains filtered or unexported fields }
Range представляет собой диапазон значений числового типа T. Содержит нижнюю и верхнюю границы, каждая из которых может быть включающей (INCLUSIVE), исключающей (EXCLUSIVE) или открытой (OPEN).
Примеры диапазонов:
- [1, 10] — от 1 до 10 включительно
- (0, 100) — от 0 до 100 исключительно
- (-∞, 5] — все значения меньше или равные 5
- [0, +∞) — все значения больше или равные 0
func NewRange ¶
func NewRange[T Numeric](lower LowerBounder[T], upper UpperBounder[T]) (*Range[T], error)
NewRange создаёт новый диапазон с указанными нижней и верхней границами. Выполняет валидацию границ:
- Верхняя граница должна быть больше нижней
- Обе границы не могут быть одновременно открытыми (OPEN)
Возвращает:
- *Range[T] — созданный диапазон
- error — ошибка валидации (UpperBelowLowerError или OpenBoundError)
Пример:
lower := NewInclusiveLowerBoundValue(0) upper := NewExclusiveUpperBoundValue(100) r, err := NewRange(lower, upper) // диапазон [0, 100)
func (*Range[T]) Contains ¶
Contains проверяет, входит ли значение value в диапазон. Возвращает true, если значение удовлетворяет условиям обеих границ.
Пример:
r, _ := NewRange(NewInclusiveLowerBoundValue(0), NewInclusiveUpperBoundValue(10)) r.Contains(5) // true r.Contains(10) // true r.Contains(-1) // false
func (*Range[T]) GetLowerBound ¶ added in v1.0.0
func (ranger *Range[T]) GetLowerBound() LowerBounder[T]
GetLowerBound возвращает нижнюю границу диапазона. Возвращаемое значение реализует интерфейс LowerBounder.
func (*Range[T]) GetUpperBound ¶ added in v1.0.0
func (ranger *Range[T]) GetUpperBound() UpperBounder[T]
GetUpperBound возвращает верхнюю границу диапазона. Возвращаемое значение реализует интерфейс UpperBounder.
type Ranger ¶
type Ranger[T Numeric] interface { // GetLowerBound возвращает нижнюю границу диапазона. GetLowerBound() LowerBounder[T] // GetUpperBound возвращает верхнюю границу диапазона. GetUpperBound() UpperBounder[T] // Contains проверяет, входит ли значение в диапазон. Contains(T) bool }
Ranger определяет контракт для работы с диапазоном значений. Позволяет получить границы диапазона и проверить вхождение значения.
type UpperBounder ¶ added in v1.0.0
type UpperBounder[T Numeric] interface { Bounder[T] // IsBelowUpperBound проверяет, находится ли значение ниже верхней границы. // Поведение зависит от типа границы: // - INCLUSIVE: val <= граница // - EXCLUSIVE: val < граница // - OPEN: всегда true IsBelowUpperBound(T) bool }
UpperBounder определяет контракт для верхней границы диапазона. Комбинирует общий интерфейс Bounder со специфичным методом проверки.
func NewExclusiveUpperBoundValue ¶ added in v1.0.0
func NewExclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]
NewExclusiveUpperBoundValue создаёт новую исключающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.
Пример:
upper := NewExclusiveUpperBoundValue(10) // верхняя граница: значение < 10
func NewInclusiveUpperBoundValue ¶ added in v1.0.0
func NewInclusiveUpperBoundValue[T Numeric](value T) UpperBounder[T]
NewInclusiveUpperBoundValue создаёт новую включающую верхнюю границу. Возвращает интерфейс UpperBounder для использования в качестве верхней границы диапазона.
Пример:
upper := NewInclusiveUpperBoundValue(10) // верхняя граница: значение <= 10
func NewOpenUpperBoundValue ¶ added in v1.0.0
func NewOpenUpperBoundValue[T Numeric]() UpperBounder[T]
NewOpenUpperBoundValue создаёт новую открытую верхнюю границу. Открытая граница означает отсутствие ограничения сверху (+∞). Возвращает интерфейс UpperBounder.
Пример:
upper := NewOpenUpperBoundValue[int]() // верхняя граница: +∞