A1sCode Главная Библиотека Стандарты
Fluent Interface Fluent API Цепочки вызовов для читаемого и компактного кода
Синтаксис Как это работает
Пример Fluent API цепочки

A1sAR.On(ВсеТовары)
.Filter("v.Цена > 1000")
.Map("v.Наименование")
.Sort()
.Take(10)
.Value()
Variables Переменные в выражениях

v — текущий элемент

Используется в Filter, Map и других трансформерах

Примеры использования v
.Filter("v > 0")
.Filter("v.Активен")
.Map("v * 2")
.Map("v.Наименование")

acc — аккумулятор

Используется в Reduce для накопления результата

Примеры использования acc
.Reduce("acc + v", 0)
.Reduce("acc * v", 1)
.Reduce("Макс(acc, v)", 0)
Transformers Трансформеры Возвращают цепочку → можно продолжать

.Filter(Expression)

⟳ Transformer

Оставляет только элементы, удовлетворяющие условию.

Примеры Filter()
A1sAR.On(Числа).Filter("v > 0").Value()
A1sAR.On(Товары).Filter("v.Активен И v.Цена > 100").Value()
A1sAR.On(Строки).Filter("СтрДлина(v) > 3").Value()

.Map(Expression)

⟳ Transformer

Преобразует каждый элемент массива.

Примеры Map()
A1sAR.On(Числа).Map("v * 2").Value()
A1sAR.On(Товары).Map("v.Наименование").Value()
A1sAR.On(Строки).Map("ВРег(v)").Value()

.Sort() / .Reverse()

⟳ Transformer

Сортировка и разворот массива.

Примеры Sort() и Reverse()
A1sAR.On(Числа).Sort().Value()           // [1, 2, 3, 4, 5]
A1sAR.On(Числа).Sort().Reverse().Value() // [5, 4, 3, 2, 1]

.Unique()

⟳ Transformer

Оставляет только уникальные элементы.

Пример Unique()
A1sAR.On(A1sAR.Of(1, 2, 2, 3, 3, 3)).Unique().Value()
// [1, 2, 3]

.Take(N) / .Skip(N)

⟳ Transformer

Взять первые N / Пропустить первые N элементов. Идеально для пагинации.

Пример пагинации
// Пагинация: страница 3, по 20 элементов
A1sAR.On(Данные).Skip(40).Take(20).Value()

.Slice(Start, End)

⟳ Transformer

Вырезает срез массива по индексам.

Пример Slice()
A1sAR.On(A1sAR.Of(0, 1, 2, 3, 4, 5)).Slice(2, 4).Value()
// [2, 3]

.Union() / .Intersection() / .Difference()

⟳ Transformer

Set-операции в цепочке.

Пример Set-операций
A1sAR.On(А).Union(Б).Difference(В).Value()

.PickNumbers() / .PickStrings() / ...

⟳ Transformer

Фильтрация по типам данных в цепочке.

Пример фильтрации по типу
A1sAR.On(Смешанный).PickNumbers().Filter("v > 0").Value()
Terminators Терминаторы Завершают цепочку → возвращают результат

.Value()

⬛ Terminator

Возвращает итоговый массив.

.First() / .Last()

⬛ Terminator

Первый / Последний элемент результата.

Пример First()
Первый = A1sAR.On(Данные).Filter("v > 100").First();

.Count()

⬛ Terminator

Количество элементов в результате.

Пример Count()
Кол = A1sAR.On(Данные).Filter("v.Активен").Count();

.Total() / .Avg() / .Minimum() / .Maximum()

⬛ Terminator

Агрегатные функции для числовых массивов.

Примеры агрегатов
Сумма = A1sAR.On(Цены).Total();
Среднее = A1sAR.On(Цены).Avg();

.Reduce(Expression, InitialValue)

⬛ Terminator

Свёртка массива с произвольной функцией. Использует переменные acc (аккумулятор) и v (элемент).

Примеры Reduce()
// Сумма
Сумма = A1sAR.On(Числа).Reduce("acc + v", 0);

// Произведение
Произв = A1sAR.On(Числа).Reduce("acc * v", 1);

// Максимум
Макс = A1sAR.On(Числа).Reduce("?(acc > v, acc, v)", 0);

// Конкатенация строк
Строка = A1sAR.On(Слова).Reduce("acc + "" "" + v", "");

.Join(Separator)

⬛ Terminator

Объединяет элементы массива в строку с разделителем.

Пример Join()
Строка = A1sAR.On(Имена).Join(", ");
// "Иван, Пётр, Сидор"

.Contains(Value) / .IndexOf(Value)

⬛ Terminator

Проверка наличия и поиск индекса в результате цепочки.

.GroupByType()

⬛ Terminator

Группировка элементов по типам данных.

Example Комплексный пример
Комплексный пример обработки продаж
// Обработка продаж: активные, с суммой > 10000, топ-5

Топ5 = A1sAR.On(ВсеПродажи)
    .Filter("v.Статус = 'Завершена'")
    .Filter("v.Сумма > 10000")
    .Map("A1sDS.Of('Клиент', v.Клиент, 'Сумма', v.Сумма)")
    .Sort()
    .Reverse()
    .Take(5)
    .Value();

// Статистика
ОбщаяСумма = A1sAR.On(ВсеПродажи)
    .Filter("v.Статус = 'Завершена'")
    .Map("v.Сумма")
    .Total();

СредняяСумма = A1sAR.On(ВсеПродажи)
    .Filter("v.Статус = 'Завершена'")
    .Map("v.Сумма")
    .Avg();
Хочешь больше примеров? 📝 Примеры →