Skip to content

Commit

Permalink
Merge pull request #3 from sfaqer/feature/lambdas
Browse files Browse the repository at this point in the history
Добавлена поддержка лямбда выражений в функциональных интерфейсах
  • Loading branch information
sfaqer authored Mar 28, 2023
2 parents 6189c4f + 5e348d4 commit 83fdf4d
Show file tree
Hide file tree
Showing 25 changed files with 906 additions and 41 deletions.
99 changes: 86 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,8 +317,13 @@ class ИтераторЗначениеСоответствие {
// начиная с того на который указывает итератор
//
// Параметры:
// Действие - Действие - Делегат на процедуру с одном параметром
// Действие - Действие - Делегат на процедуру с одним параметром
// которая принимает элемент коллекции
// - Строка - Лямбда выражение с одним параметром
// которая принимает элемент коллекции
//
// Пример:
// Итератор.ДляКаждогоОставшегося(Элемент -> Сообщить(Элемент));
//
Процедура ДляКаждогоОставшегося(Действие)
```
Expand Down Expand Up @@ -425,9 +430,14 @@ class ИтераторЗначениеСоответствие {
// Выполняет переданный алгоритм для каждого элемента коллекции
//
// Параметры:
// Алгоритм - Действие - Делегат на процедуру с одном параметром, в который
// Алгоритм - Действие - Делегат на процедуру с одним параметром, в который
// будет передан элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который будет
// будет передан элемент коллекции
//
// Пример:
// Обходимое.ДляКаждого("Элемент -> Сообщить(Элемент)");
//
Процедура ДляКаждого(Алгоритм)
```
---
Expand Down Expand Up @@ -580,6 +590,10 @@ class ИтераторЗначениеСоответствие {
//
// Параметры:
// Предикат - Действие - Делегат на функцию с одним параметром, в которой передаётся элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который передаётся элемент коллекции
//
// Пример:
// Коллекция.УдалитьЕсли("(Элемент) -> Элемент >= 2");
//
// Возвращаемое значение:
// Булево - Истина, если был удалён хотя бы один элемент
Expand Down Expand Up @@ -697,6 +711,11 @@ class ИтераторЗначениеСоответствие {
// Параметры:
// Алгоритм - Действие - Делегат на функцию с одним параметром, в которую передаётся
// элемент списка, и которая возвращает новое значение элемента
// - Строка - Лямбда выражение с одним параметром, в который передаётся
// элемент списка, и которая возвращает новое значение элемента
//
// Пример:
// Список.ЗаменитьВсе("Элемент -> Элемент + 1");
//
Процедура ЗаменитьВсе(Алгоритм)
```
Expand All @@ -708,12 +727,28 @@ class ИтераторЗначениеСоответствие {
//
// Параметры:
// СравнениеЗначений - Действие - Делегат на функцию с двумя параметрами
// в которую передаются 2 элемента коллекции, и которая возвращает число:
// 1 - Если первый элемент больше
// -1 - Если второй элемент больше
// 0 - Если элементы равны
// в которую передаются 2 элемента коллекции, и которая возвращает число
// 1 - Если первый элемент больше,
// -1 - Если второй элемент больше,
// 0 - Если элементы равны
// - Строка - Лямбда выражение с двумя параметрами
// в которую передаются 2 элемента коллекции, и которая возвращает число
// 1 - Если первый элемент больше,
// -1 - Если второй элемент больше,
// 0 - Если элементы равны
//
// Пример:
// Список.Сортировать("Первый, Второй -> {
// | Если Первый > Второй Тогда
// | Возврат 1;
// | ИначеЕсли Второй > Первый Тогда
// | Возврат -1;
// | Иначе
// | Возврат 0;
// | КонецЕсли;
// |}"
// );
//
Процедура Сортировать(СравнениеЗначений)
```

### УдалитьПоИндексу
Expand Down Expand Up @@ -783,7 +818,11 @@ class ИтераторЗначениеСоответствие {
//
// Параметры:
// Алгоритм - Действие - Делегат на метод с двумя параметрами который будет выполнятся
// в первый параметр передаёт ключ во второй значение
// в первый параметр передаётся ключ во второй значение
// - Строка - Лямбда выражение с двумя параметрами в первый параметр передаётся ключ во второй значение
//
// Пример:
// Карта.ДляКаждого("(Ключ, Значение) -> Сообщить(СтрШаблон(""Ключ: %1, Значение:2"", Ключ, Значение))");
//
Процедура ДляКаждого(Алгоритм)
```
Expand Down Expand Up @@ -935,7 +974,12 @@ class ИтераторЗначениеСоответствие {
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет).
// и Опциональный от текущего значения ключа (пустой если ключа нет)
// - Строка - Лямбда выражение с двумя параметрами в которую будут переданы ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет)
//
// Пример:
// Карта.ВычислитьБезусловно("Ключ", "(Ключ, Значение) -> ?(Значение.Пустой(), Истина, Ложь)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand All @@ -954,6 +998,10 @@ class ИтераторЗначениеСоответствие {
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияНазначения - Действие - Делегат на функцию с одним параметром, в которую передаётся переданный ключ
// - Строка - Лямбда выражение с одним параметром в который будет передан переданный ключ
//
// Пример:
// Карта.ВычислитьЕслиОтсутствует("Ключ", "(Ключ) -> СтрДлина(Ключ)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа если оно было вычислено, или текущее значение ключа
Expand All @@ -974,6 +1022,18 @@ class ИтераторЗначениеСоответствие {
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и текущее значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются ключ и текущее
// значение ключа
//
// Пример:
// Карта.ВычислитьЕслиПрисутствует("Ключ", "(Ключ, Значение) -> {
// | Если Ключ = ""Ключ"" Тогда
// | Возврат СтрДлина(Значение.Получить());
// | Иначе
// | Возврат Неопределенно;
// | КонецЕсли;
// |}"
// );
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand All @@ -992,8 +1052,17 @@ class ИтераторЗначениеСоответствие {
// Параметры:
// Ключ - Произвольный - Ключ, значения для которого требуется объединить
// Значение - Произвольный - Новое значение ключа
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами со старым и новым
// значением ключа
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами в которые передаются
// существующее и новое значение ключа
// - Строка - Лямбда выражение с двумя параметрами в которые передаются
// существующее и новое значение ключа
//
// Пример:
// Карта.Слить("Ключ", 4, "(СуществующееЗначение, НовоеЗначение) ->
// | Возврат ?(НовоеЗначение > СуществующееЗначение,
// | НовоеЗначение,
// | СуществующееЗначение
// | );")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand Down Expand Up @@ -1040,7 +1109,12 @@ class ИтераторЗначениеСоответствие {
//
// Параметры:
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую
// передаются ключ и значение карты
// передаются ключ и значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются
// ключ и значение ключа
//
// Пример:
// Карта.ЗаменитьВсе("(Ключ, Значение) -> Значение + 1")
//
Процедура ЗаменитьВсе(ФункцияПереназначения)
```
Expand All @@ -1058,4 +1132,3 @@ class ИтераторЗначениеСоответствие {
//
Функция Удалить(Ключ)
```

3 changes: 2 additions & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("collectionos")
.Версия("0.1.0")
.Версия("0.2.0")
.Автор("Кирилл Черненко")
.АдресАвтора("https://github.com/sfaqer")
.Описание("Фреймворк коллекций для OneScript")
Expand All @@ -10,6 +10,7 @@
.ВключитьФайл("package-loader.os")
.ЗависитОт("reflector", "0.7.1")
.ЗависитОт("fluent", "0.5.0")
.ЗависитОт("lambdas", "0.1.1")
.ЗависитОт("optional")
.РазработкаЗависитОт("1commands")
.РазработкаЗависитОт("1testrunner")
Expand Down
43 changes: 39 additions & 4 deletions src/internal/Классы/Интерфейсы/Карта.os
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,12 @@
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет).
// и Опциональный от текущего значения ключа (пустой если ключа нет)
// - Строка - Лямбда выражение с двумя параметрами в которую будут переданы ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет)
//
// Пример:
// Карта.ВычислитьБезусловно("Ключ", "(Ключ, Значение) -> ?(Значение.Пустой(), Истина, Ложь)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand All @@ -60,6 +65,10 @@
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияНазначения - Действие - Делегат на функцию с одним параметром, в которую передаётся переданный ключ
// - Строка - Лямбда выражение с одним параметром в который будет передан переданный ключ
//
// Пример:
// Карта.ВычислитьЕслиОтсутствует("Ключ", "(Ключ) -> СтрДлина(Ключ)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа если оно было вычислено, или текущее значение ключа
Expand All @@ -77,6 +86,18 @@
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и текущее значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются ключ и текущее
// значение ключа
//
// Пример:
// Карта.ВычислитьЕслиПрисутствует("Ключ", "(Ключ, Значение) -> {
// | Если Ключ = ""Ключ"" Тогда
// | Возврат СтрДлина(Значение.Получить());
// | Иначе
// | Возврат Неопределенно;
// | КонецЕсли;
// |}"
// );
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand All @@ -92,8 +113,17 @@
// Параметры:
// Ключ - Произвольный - Ключ, значения для которого требуется объединить
// Значение - Произвольный - Новое значение ключа
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами со старым и новым
// значением ключа
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами в которые передаются
// существующее и новое значение ключа
// - Строка - Лямбда выражение с двумя параметрами в которые передаются
// существующее и новое значение ключа
//
// Пример:
// Карта.Слить("Ключ", 4, "(СуществующееЗначение, НовоеЗначение) ->
// | Возврат ?(НовоеЗначение > СуществующееЗначение,
// | НовоеЗначение,
// | СуществующееЗначение
// | );")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
Expand Down Expand Up @@ -131,7 +161,12 @@
//
// Параметры:
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую
// передаются ключ и значение карты
// передаются ключ и значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются
// ключ и значение ключа
//
// Пример:
// Карта.ЗаменитьВсе("(Ключ, Значение) -> Значение + 1")
//
Процедура ЗаменитьВсе(ФункцияПереназначения) Экспорт
КонецПроцедуры
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,10 @@
//
// Параметры:
// Предикат - Действие - Делегат на функцию с одним параметром, в которой передаётся элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который передаётся элемент коллекции
//
// Пример:
// Коллекция.УдалитьЕсли("(Элемент) -> Элемент >= 2");
//
// Возвращаемое значение:
// Булево - Истина, если был удалён хотя бы один элемент
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,13 @@
// Выполняет переданный алгоритм для каждого элемента коллекции
//
// Параметры:
// Алгоритм - Действие - Делегат на процедуру с одном параметром, в который
// Алгоритм - Действие - Делегат на процедуру с одним параметром, в который
// будет передан элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который будет
// будет передан элемент коллекции
//
// Пример:
// Обходимое.ДляКаждого("Элемент -> Сообщить(Элемент)");
//
Процедура ДляКаждого(Алгоритм) Экспорт
КонецПроцедуры
Expand Down
Loading

0 comments on commit 83fdf4d

Please sign in to comment.