functional
Содержит функции для работы с данными в функциональном стиле
Константы
IDENTITY
: function = def(x) = x
функция, которая возвращает переданный в неё аргумент
Функции
chain(data, functions...)
combine(functions...)
- комбинирует функции (композиция)
Пример
f = combine(::f1, ::f2, ::f3)
// равносильно
f = def(f1, f2, f3) = f3(f2(f1))
dropwhile(data, predicate)
- пропускает элементы пока функция-предикат возвращает true
filter(data, predicate)
- фильтрует массив или объект и возвращает массив только с теми элементами, которые удовлетворяют предикату predicate
.
predicate
- функция которая принимает один (для массивов) и два (для объектов) аргумента
Пример
nums = [1,2,3,4,5]
print filter(nums, def(x) = x % 2 == 0) // [2, 4]
flatmap(array, mapper)
- преобразует каждый элемент массива в массив элементов
Пример
nums = [1,2,3,4]
print flatmap(nums, def(x) {
arr = newarray(x)
for i = 0, i < x, i++
arr[i] = x
return arr
}) // [1, 2, 2, 3, 3, 3, 4, 4, 4, 4]
foreach(data, consumer)
- для каждого элемента в массиве или объекте data
вызывает функцию consumer
Если data
- массив, то в функции consumer
необходим один параметр, если объект - два (ключ и значение).
Пример
foreach([1, 2, 3], def(v) { print v })
foreach({"key": 1, "key2": "text"}, def(key, value) {
print key + ": " + value
})
map(data, mapper...)
- преобразует элементы массива или объекта.
Если data
- массив, то функция mapper
преобразует значения, если объект - необходимо передать две функции: keyMapper
- преобразует ключи и valueMapper
- преобразует значения
Пример
nums = [3,4,5]
print map(nums, def(x) = x * x) // [9, 16, 25]
reduce(data, identity, accumulator)
- преобразует элементы массива или объекта в одно значение, например сумма элементов или объединение в строку.
Если data
- массив, то в функции accumulator
необходим один параметр, если объект - два (ключ и значение)
Пример
nums = [1,2,3,4,5]
print reduce(nums, 0, def(x, y) = x + x) // 15
sortby(array, function)
- сортирует элементы массива по данным в функции function
Пример
data = [
{"k1": 2, "k2": "x"},
{"k1": 7, "k2": "d"},
{"k1": 4, "k2": "z"},
{"k1": 5, "k2": "p"},
]
print sortby(data, def(v) = v.k1) // [{k1=2, k2=x}, {k1=4, k2=z}, {k1=5, k2=p}, {k1=7, k2=d}]
print sortby(data, def(v) = v.k2) // [{k1=7, k2=d}, {k1=5, k2=p}, {k1=2, k2=x}, {k1=4, k2=z}]
stream(data)
- создаёт stream из данных и возвращает StreamValue
Функции StreamValue:
filter(func)
- фильтрует элементыmap(func)
- преобразует каждый элементflatMap(func)
- преобразует каждый элемент в массивsortBy(func)
- сортирует элементы в соответствии с функцией-компараторомtakeWhile(func)
- собирает элементы пока функция-предикат возвращает truedropWhile(func)
- пропускает элементы пока функция-предикат возвращает trueskip(count)
- пропускает указанное количество элементовlimit(count)
- ограничивает количество элементовcustom(func)
- выполняет пользовательскую операцию над даннымиreduce(func)
- преобразует элементы в одно значениеforEach(func)
- вызывает функцию для каждого элементаtoArray()
- возвращает массив элементовcount()
- возвращает количество элементов
takewhile(data, predicate)
- собирает элементы пока функция-предикат возвращает true