Skip to content

Быстрая обработка коллекций в "текучем" стиле

License

Notifications You must be signed in to change notification settings

nixel2007/oscript-fluent

Repository files navigation

fluent

Build Status Quality Gate Maintainability Coverage

Библиотека быстрой обработки коллекций.

Позволяет в "текучем" стиле обрабатывать коллекции - фильтровать, упорядочивать, выполнять операции над элементы, получать результат в виде заданного типа и др.

Возможности

Поддержка строк, массивов, таблиц значений, деревьев значений.

Структуры и соответствия incoming

Конвейерные методы:

  • Первые
  • Пропустить
  • Различные
  • Обработать
  • Развернуть
  • Фильтровать
  • Сортировать
  • СортироватьПо

Терминальные методы:

  • ПолучитьПервый
  • ВМассив
  • ВСтроку
  • Количество
  • ДляКаждого
  • Минимум
  • Максимум
  • Сократить
  • Получить
  • ЛюбойСоответствует
  • ВсеСоответствуют
  • ВсеНеСоответствуют

Функции сравнения, фильтрации, обработки могут задаваться с помощью:

  • Строк библиотека lambdas
  • Действие

Библиотека помимо конструктора класса ПроцессорКоллекций содержит вспомогательный модуль, включающий:

  • построитель процессора коллекций ИзКоллекции()
  • построитель процессора коллекций ИзСтроки()
  • построитель процессора коллекций ИзНабора()
  • СтандартнаяФункцияСравненияПрямойПорядок() - типовой comparator, возвращающий результат сравнения как 1, 0, -1

Примеры работы

Массив = Новый Массив;
Массив.Добавить(3);
Массив.Добавить(4);
Массив.Добавить(7);
Массив.Добавить(5);
Массив.Добавить(1);
Массив.Добавить(0);

Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Пропустить(1)
	.Фильтровать("Элемент -> Элемент >= 5")
	.Первые(2)
	.Обработать("Элемент -> Элемент + 1")
	.Получить(Тип("Массив"));

// На выходе массив [8, 6]

Тоже самое с помощью Действие:

Функция ОбработчикФильтрации(Элемент) Экспорт
	Возврат Элемент >= 5;
КонецФункции

Функция ОбработчикОбработки(Элемент) Экспорт

	Результат = Элемент + 1;

	Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат);

	Возврат Результат;

КонецФункции

ФункцияФильтрации = Новый Действие(ЭтотОбъект, "ОбработчикФильтрации");
ФункцияОбработки = Новый Действие(ЭтотОбъект, "ОбработчикОбработки");

Результат = ПроцессорыКоллекций.ИзКоллекции(Массив)
	.Пропустить(1)
	.Фильтровать(ФункцияФильтрации)
	.Первые(2)
	.Обработать(ФункцияОбработки)
	.Получить(Тип("Массив"));
Массив = Новый Массив;
Массив.Добавить(4);
Массив.Добавить(2);
Массив.Добавить(2);
Массив.Добавить(3);
Массив.Добавить(3);
Массив.Добавить(3);

ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив);
ПроцессорКоллекций
	.Различные()
	.Сортировать()
	.ДляКаждого("Элемент -> Сообщить(Элемент)");

// На выходе сообщения в консоль:
// 2
// 3
// 4
Строка = 
|строка
|многострочная";

ПроцессорыКоллекций
	.ИзСтроки(Строка, Символы.ПС)
	.Фильтровать("Элемент -> СтрДлина(Элемент) > 1")
	.ДляКаждого("Элемент -> Сообщить(Элемент)");

// На выходе сообщения в консоль:
// многострочная
// строка

Больше примеров работы в каталогах examples и tests.

Публичный интерфейс

Класс ПроцессорКоллекций

Общее API

УстановитьКоллекцию

// Устанавливает коллекцию для обработки Процессора коллекций.
//
// Параметры:
//   НоваяКоллекция - Массив, ТаблицаЗначений, ДеревоЗначений - Коллекция, устанавливаемая в процессор.
//
Процедура УстановитьКоллекцию(НоваяКоллекция) 

Отладка

// Включает возможность отладки. Достигается сохранением текста модуля во временный файл.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Ссылка на текущий инстанс ПроцессорКоллекций
//
Функция Отладка(Включена = Истина) 

Конвейерные методы

Первые

// Получить первые N элементов.
// Конвейерный метод.
//
// Параметры:
//   Количество - Число - Число отбираемых элементов.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
Функция Первые(Количество) 

Пропустить

// Пропустить первые N элементов.
// Конвейерный метод.
//
// Параметры:
//   Количество - Число - Число пропускаемых элементов.
//
// Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
Функция Пропустить(Количество) 

Различные

// Выбрать различные элементы.
// Конвейерный метод.
//
// Параметры:
//   ФункцияРавенства - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Булево, Истина если элементы равны, Ложь в противном случае
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Булево, Истина если элементы равны, Ложь в противном случае
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияРавенства(),
//    проверка "Элемент1 = Элемент2"
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//
//   ПроцессорКоллекций = ПроцессорыКоллекций.ИзНабора(
//       Новый Структура("Имя, Возраст", "Вася", 25),
//       Новый Структура("Имя, Возраст", "Петя", 27),
//       Новый Структура("Имя, Возраст", "Ваня", 25)
//   );
//
//   // 1:
//   ПроцессорКоллекций.Различные("(ЧеловекПервый, ЧеловекВторой) -> ЧеловекПервый.Возраст = ЧеловекВторой.Возраст");
//
//   // В коллекции останутся: Вася(25) и Петя(27)
//
//   // 2:
//   Функция МояФункцияФункцияРавенства(ЭлементПервый, ЭлементВторой) Экспорт
//       Возврат ЧеловекПервый.Возраст = ЧеловекВторой.Возраст;
//   КонецФункции
//
//   ПроцессорКоллекций.Различные(Новый Действие(ЭтотОбъект, "МояФункцияФункцияРавенства"));
//
//   // В коллекции останутся: Вася(25) и Петя(27)
//
Функция Различные(Знач ФункцияРавенства = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

Обработать

// Обработать каждый элемент коллекции.
// Конвейерный метод.
//
// Параметры:
//   ФункцияОбработки - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает новый элемент
//                    - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает новый элемент
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Обработать("Элемент -> Элемент + 1");
//
//		// 2:
//		Функция МояФункцияОбработки(Элемент) Экспорт
//			Возврат Элемент + 1;
//		КонецФункции
//
//		ФункцияОбработки = Новый Действие(ЭтотОбъект, "МояФункцияОбработки");
//		ПроцессорКоллекций.Обработать(ФункцияОбработки);
//
Функция Обработать(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) 

Развернуть

// Развернуть каждый элемент коллекции в процессор коллекций.
// Позволяет расширить имеющуюся коллекцию.
// Например, разворачивание массива массивов сделает новый массив, содержащий все элементы всех массивов.
// Конвейерный метод.
//
// Параметры:
//   ФункцияРазворачивания - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает ПроцессорКоллекций из элемента
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает ПроцессорКоллекций из элемента
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
// Возвращаемое значение:
//	ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
// Примеры:
//	// 1:
//	ПроцессорКоллекций.Развернуть("Элемент -> ПроцессорыКоллекций.ИзСтроки(Элемент)");
//
//	// 2:
//	Функция МояФункцияРазворачивания(Элемент) Экспорт
//		Возврат ПроцессорыКоллекций.ИзСтроки(Элемент);
//	КонецФункции
//	
//	ФункцияРазворачивания = Новый Действие(ЭтотОбъект, "МояФункцияРазворачивания");
//	ПроцессорКоллекций.Развернуть(ФункцияРазворачивания);
//
Функция Развернуть(Знач ФункцияРазворачивания, Знач ДополнительныеПараметры = Неопределено) 

Фильтровать

// Фильтровать коллекцию по условию.
// Конвейерный метод.
//
// Параметры:
//   ФункцияФильтрации - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Фильтровать("Элемент -> СтрДлина(Элемент) > 1");
//
//		// 2:
//		Функция МояФункцияФильтрации(Результат, ДополнительныеПараметры) Экспорт
//			Возврат СтрДлина(ДополнительныеПараметры.Элемент) > 1;
//		КонецФункции
//		
//		ФункцияФильтрации = Новый Действие(ЭтотОбъект, "МояФункцияФильтрации");
//		ПроцессорКоллекций.Фильтровать(ФункцияФильтрации);
//
Функция Фильтровать(Знач ФункцияФильтрации, Знач ДополнительныеПараметры = Неопределено) 

Сортировать

// Сортировать элементы коллекции.
// Конвейерный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Сортировать("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 2:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Сортировать(ФункцияСравнения);
//
Функция Сортировать(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

СортироватьПо

// Сортировать элементы коллекции по выбранному полю.
// Конвейерный метод.
//
// Параметры:
//   ИмяПоля - Строка - Имя поля элемента коллекции, по которому необходимо осуществлять сортировку.
//
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса "ПроцессорКоллекций".
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.СортироватьПо("НомерСтроки", "(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 2:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.СортироватьПо("НомерСтроки", ФункцияСравнения);
//
Функция СортироватьПо(Знач ИмяПоля, Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

Терминальные методы

ПолучитьПервый

// Получить первый элемент.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Произвольный - Первый элемент из коллекции. Если коллекция пуста, возвращает Неопределено.
//
Функция ПолучитьПервый() 

ВМассив

// Получить коллекцию в виде массива.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Массив - Массив элементов коллекции.
//
Функция ВМассив() 

ВСтроку

// Получить коллекцию в виде строки.
// Терминальный метод.
//
// Параметры:
//	РазделительСтрок - Строка - Используемый разделитель между элементами при конкатенации строк.
// 
//  Возвращаемое значение:
//   Строка - Элементы коллекции, соединенные в строку методом конкатенации.
//
Функция ВСтроку(РазделительСтрок = "") 

Количество

// Получить количество элементов коллекции.
// Терминальный метод.
//
//  Возвращаемое значение:
//   Число - Количество элементов коллекции.
//
Функция Количество() 

ДляКаждого

// Обработать каждый элемент коллекции и завершить работу процессора.
// Терминальный метод.
//
// Параметры:
//   ФункцияОбработки - Строка - Лямбда выражение процедура с одним параметром в который будет передан элемент
//                    - Действие - Делегат на процедуру с одним параметром в который будет передан элемент
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.ДляКаждого("Элемент -> Сообщить(Элемент);");
//
//		// 2:
//		Процедура МояПроцедураОбработки(Элемент) Экспорт
//			Сообщить(Элемент);
//		КонецПроцедуры
//		
//		ПроцедураОбработки = Новый Действие(ЭтотОбъект, "МояПроцедураОбработки");
//		ПроцессорКоллекций.ДляКаждого(ПроцедураОбработки);
//
Процедура ДляКаждого(Знач ФункцияОбработки, Знач ДополнительныеПараметры = Неопределено) 

Минимум

// Получить минимальный элемент.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - минимальный элемент коллекции.
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Минимум();
//
//		// 2:
//		ПроцессорКоллекций.Минимум("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 3:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Минимум(ФункцияСравнения);
//
Функция Минимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

Максимум

// Получить максимальный элемент.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Действие - Делегат на функцию с двумя параметрами, в которые будут переданы два элемента,
//    и которая возвращает Число, 1 - если первый элемент больше, -1 если второй элемент больше, 0 - если элементы равны
//                    - Неопределено - см. ПроцессорыКоллекций.СтандартнаяФункцияСравненияПрямойПорядок(),
//    проверка через ">", "<", "="
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - максимальный элемент коллекции.
//
//  Примеры:
//		// 1:
//		ПроцессорКоллекций.Максимум();
//
//		// 2:
//		ПроцессорКоллекций.Максимум("(Первый, Второй) -> 
//          | Если Первый > Второй Тогда Возврат 1;
//          | ИначеЕсли Второй > Первый Тогда Возврат -1;
//          | Иначе Возврат 0;
//          | КонецЕсли;"
//      );
//
//		// 3:
//		Функция МояФункцияСравнения(Первый, Второй) Экспорт
//          Если Первый > Второй Тогда 
//              Возврат 1;
//          ИначеЕсли Второй > Первый Тогда
//              Возврат -1;
//          Иначе 
//              Возврат 0;
//          КонецЕсли;
//		КонецФункции
//		
//		ФункцияСравнения = Новый Действие(ЭтотОбъект, "МояФункцияСравнения");
//		ПроцессорКоллекций.Максимум(ФункцияСравнения);
//
Функция Максимум(Знач ФункцияСравнения = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

Сократить

// Выполнить агрегатную функцию над элементами коллекции.
// Терминальный метод.
//
// Параметры:
//   ФункцияСокращения - Строка - Лямбда выражение функция с двумя параметрами в которые будут переданы 
//    результат аккумулятор и очередной элемент коллекции, и которая возвращает новое значение результата
//                    - Действие - Делегат на функцию с двумя параметрами в которые будут переданы 
//    результат аккумулятор и очередной элемент коллекции, и которая возвращает новое значение результата
//
//   НачальноеЗначение - Произвольный - начальное значение, передаваемое в функцию сокращения в параметр "Результат"
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Произвольный - результат работы агрегатной функции.
//
//  Примеры:
//		2:
//		ПроцессорКоллекций.Сократить("Результат, Элемент -> Результат + Элемент", 0);
//
//		2:
//		Функция МояФункцияСокращения(Результат, Элемент) Экспорт
//			Возврат Результат + Элемент;
//		КонецФункции
//		
//		ФункцияСокращения = Новый Действие(ЭтотОбъект, "МояФункцияСокращения");
//		ПроцессорКоллекций.Сократить(ФункцияСокращения);
//
Функция Сократить(Знач ФункцияСокращения, Знач НачальноеЗначение = Неопределено, Знач ДополнительныеПараметры = Неопределено) 

Получить

// Получить коллекцию в виде объекта заданного типа.
// Терминальный метод.
//
// Параметры:
//   ТипРезультата - Тип - Тип, в котором необходимо вернуть коллекцию.
//
//  Возвращаемое значение:
//   Произвольный - Коллекция в виде объекта нужного типа.
//
Функция Получить(ТипРезультата) 

ЛюбойСоответствует

// Проверить, что хотя бы один элемент коллекции удовлетворяет условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если минимум один из элементов коллекции удовлетворяет условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Ложь.
//
Функция ЛюбойСоответствует(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) 

ВсеСоответствуют

// Проверить, что все элементы коллекции удовлетворяют условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если все элементы коллекции удовлетворяют условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Истина.
//
Функция ВсеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) 

ВсеНеСоответствуют

// Проверить, что все элементы коллекции не удовлетворяют условию в функции сравнения.
// Терминальный метод.
//
// Параметры:
//   ФункцияСравнения - Строка - Лямбда выражение функция с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//                         - Действие - Делегат на функцию с одним параметром в который будет передан элемент,
//    и которая возвращает Булево, Истина если элемент проходит фильтр, ложь в противном случае
//
//   ДополнительныеПараметры - Структура - Контекст добавляемый в лямбда выражение, 
//    значения будут доступны по обращению к ключу как к переменной.
//    При передачи действия в первом параметре, этот параметр игнорируется
//                           - Сценарий - Экземпляр объекта, который будет захвачен в лямбда выражение,
//    в лямбда выражении будет доступен контекст (публичные и приватные поля, публичные методы) объекта.
//    При передачи действия в первом параметре, этот параметр игнорируется
//
//  Возвращаемое значение:
//   Булево - Истина, если все элементы коллекции не удовлетворяют условию Функции сравнения.
//		В обратном случае возвращает Ложь.
//		Если коллекция пустая, возвращает Истина.
//
Функция ВсеНеСоответствуют(Знач ФункцияСравнения, Знач ДополнительныеПараметры = Неопределено) 

Модуль ПроцессорыКоллекций

ИзКоллекции

// Создать ПроцессорКоллекций на основании переданной коллекции.
//
// Параметры:
//   Коллекция - Произвольный - Коллекция (Массив, ТаблицаЗначений...), на основании которой нужно
//		сформировать ПроцессорКоллекций.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданной коллекцией.
//
Функция ИзКоллекции(Коллекция) Экспорт

ИзСтроки

// Создать ПроцессорКоллекций на основании переданной строки.
// Переданная строка преобразуется в коллекцию путем разделения строк.
//
// Параметры:
//   Строка - Строка - Строка, на основании которой нужно сформировать ПроцессорКоллекций.
//   РазделительСтрок - Строка - Разделитель строк, применяемый к Строке для получения коллекции.
//		Если не передан, строка разделяется на элементы посимвольно.
//   ВключатьПустые - Булево - Указывает необходимость включать в коллекцию пустые строки,
//		которые могут образоваться в результате разделения исходной строки.
//
//  Возвращаемое значение:
//   ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций.
//
Функция ИзСтроки(Строка, РазделительСтрок = Неопределено, ВключатьПустые = Истина) Экспорт

ИзНабора

// Создать ПроцессорКоллекций на основании переданного набора значений.
// Добавляет элемент в ПроцессорКоллекций, если он не равен NULL.
//
// Параметры:
//	Элемент1 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	Элемент2 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	Элемент3 - Произвольный - Элемент для добавления в ПроцессорКоллекций.
//	... Всего 32 параметра ...
//
// Возвращаемое значение:
//	ПроцессорКоллекций - Инстанс класса ПроцессорКоллекций, заполненный переданным набором.
//
Функция ИзНабора(Элемент1 = NULL, Элемент2 = NULL, Элемент3 = NULL, ...) Экспорт

СтандартнаяФункцияСравненияПрямойПорядок

// Стандартная функция сравнения.
// Сравнивает значения элементов коллекции через операторы ">", "<" и "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод сравнения
//
Функция СтандартнаяФункцияСравненияПрямойПорядок() 

СтандартнаяФункцияСравненияОбратныйПорядок

// Стандартная функция сравнения в обратном порядке
// Сравнивает значения элементов коллекции через операторы ">", "<" и "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод сравнения в обратном порядке
//
Функция СтандартнаяФункцияСравненияОбратныйПорядок() 

СтандартнаяФункцияРавенства

// Стандартная функция проверки на равенство
// Сравнивает значения элементов коллекции через "=".
//
//  Возвращаемое значение:
//   Действие - Делегат на стандартный метод проверки на равенство
//
Функция СтандартнаяФункцияРавенства() 

Отладка методов

Для того, что бы работал отладчик и заходил в добавленные методы нужно: Либо установить любое значение переменной окружения с именем OSCRIPT_FLUENT_DEBUG. Либо вызвать метод Отладка()


Вдохновение черпалось из java8 stream-api.