[]T — встроенный динамический массив Nova (синтаксис D27, представление D32 (ptr, len, cap)). Встроенный API — len, cap, push, pop, with_capacity, [i] — предоставляется компилятором. Этот модуль добавляет функциональные комбинаторы через обобщённые параметры получателя (D35).

ro nums []int = [1, 2, 3, 4, 5]
ro squared = nums.map(|x| x * x)
ro evens   = nums.filter(|x| x % 2 == 0)
ro total   = nums.fold(0, |acc, x| acc + x)
assert(total == 15)

map

стабильно с 0.1
fn []T @map[U](f fn(T) -> U) -> []U

Применяет f к каждому элементу и возвращает новый массив []U. Метод-уровневый обобщённый параметр [U] (D42) позволяет одному методу []T возвращать любой целевой тип.

Примеры

ro v []int = [1, 2, 3]
assert(v.map(|x| x * 2) == [2, 4, 6])

filter

стабильно с 0.1
fn []T @filter(pred fn(T) -> bool) -> []T

Возвращает новый массив, содержащий только элементы, для которых pred(x) равен true. Сохраняет порядок. Исходный массив не изменяется.

Примеры

ro v []int = [1, 2, 3, 4, 5]
assert(v.filter(|x| x % 2 == 0) == [2, 4])

fold

стабильно с 0.1
fn []T @fold[Acc](init Acc, f fn(Acc, T) -> Acc) -> Acc

Левая свёртка (reduce). Начинает с аккумулятора init и применяет f(acc, x) для каждого элемента. Метод-уровневый обобщённый параметр [Acc] не зависит от T, поэтому можно свернуть []int в str и так далее.

Примеры

ro v []int = [1, 2, 3, 4]
assert(v.fold(0, |acc, x| acc + x) == 10)

any

стабильно с 0.1
fn []T @any(pred fn(T) -> bool) -> bool

Возвращает true, если хотя бы один элемент удовлетворяет pred. Останавливается на первом совпадении. На пустом массиве возвращает false.

Примеры

ro v []int = [1, 2, 3]
assert(v.any(|x| x > 2))
assert(!v.any(|x| x > 10))

all

стабильно с 0.1
fn []T @all(pred fn(T) -> bool) -> bool

Возвращает true, если каждый элемент удовлетворяет pred. Останавливается на первом несовпадении. Пустая истинность: на пустом массиве возвращает true.

Примеры

ro v []int = [2, 4, 6]
assert(v.all(|x| x % 2 == 0))

first

стабильно с 0.1
fn []T @first() -> Option[T]

Возвращает первый элемент, обёрнутый в Some(T), либо None, если массив пуст.

Примеры

ro v []int = [10, 20, 30]
assert(v.first() == Some(10))
assert([]int.new().first() == None)

last

стабильно с 0.1
fn []T @last() -> Option[T]

Возвращает последний элемент, обёрнутый в Some(T), либо None, если массив пуст.

Примеры

ro v []int = [10, 20, 30]
assert(v.last() == Some(30))
assert([]int.new().last() == None)