Skip to content

Commit f7ef748

Browse files
authored
Merge pull request #25 from sfaqer/feature/rework
Переработка процессора коллекций
2 parents 69b4416 + 245ee86 commit f7ef748

35 files changed

+2109
-1539
lines changed

.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11

22
*.ospx
3-
coverage/
3+
build/
44
.sonar/
55
.sonarlint/
6+
.vscode

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,15 @@
1+
## 0.6.0
2+
* Добавлена поддержка Действие для функционального интерфейса
3+
* Добавлена поддержка лямбда выражений библиотеки lambdas
4+
* Ядро переписано с `notify` на собственную абстракцию `ШагКонвейера`
5+
* Шаги конвейера разделены на барьерные и не барьерные операции
6+
7+
> DEPRECATION NOTICE:
8+
9+
* Отказ от использования notify, в пользу Действие
10+
* Синтаксис лямбда выражений заменён на использование lambdas
11+
* ОписаниеОповещений и старый синтаксис лямбда выражений поддерживаются в рамках обратной совместимости, однако при их использовании будут предупреждения в логе, пожалуйста замените все места использования устаревшей функциональности
12+
113
## 0.5.0
214

315
* Добавлена возможность отладки временных сценариев путем создания временных файлов под текст сценария.

README.md

Lines changed: 356 additions & 288 deletions
Large diffs are not rendered by default.

examples/github.os

Lines changed: 54 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,49 @@
11
#Использовать ".."
2-
#Использовать notify
32

43
Перем Таблица;
54

6-
Процедура ДобавитьСтрокуВТаблицу(Имя, Фолловеры, Местоположение, Контрибьюции);
5+
Процедура ДобавитьСтрокуВТаблицу(Имя, Фолловеры, Местоположение, Контрибьюции)
6+
77
Строка = Таблица.Добавить();
8-
Строка.Имя = Имя;
9-
Строка.Фолловеры = Фолловеры;
8+
9+
Строка.Имя = Имя;
10+
Строка.Фолловеры = Фолловеры;
1011
Строка.Местоположение = Местоположение;
11-
Строка.Контрибьюции = Контрибьюции;
12-
КонецПроцедуры
12+
Строка.Контрибьюции = Контрибьюции;
1313

14-
Процедура Обработчик_ФильтрацияПоМестоположению(РезультатФильтрации, ДополнительныеПараметры) Экспорт
15-
РезультатФильтрации = ДополнительныеПараметры.Элемент.Местоположение = "Россия";
1614
КонецПроцедуры
1715

18-
Процедура Обработчик_СортировкаПоФолловерам(РезультатСравнения, ДополнительныеПараметры) Экспорт
19-
РезультатСравнения = ДополнительныеПараметры.Элемент1.Фолловеры < ДополнительныеПараметры.Элемент2.Фолловеры;
20-
КонецПроцедуры
16+
Функция Обработчик_ФильтрацияПоМестоположению(Элемент) Экспорт
17+
Возврат Элемент.Местоположение = "Россия";
18+
КонецФункции
2119

22-
Процедура Обработчик_СортировкаПоКонтрибьюциям(РезультатСравнения, ДополнительныеПараметры) Экспорт
23-
РезультатСравнения = ДополнительныеПараметры.Элемент1.Контрибьюции < ДополнительныеПараметры.Элемент2.Контрибьюции;
24-
КонецПроцедуры
20+
Функция Обработчик_СортировкаПоФолловерам(Первый, Второй) Экспорт
21+
22+
Если Первый.Фолловеры > Второй.Фолловеры Тогда
23+
Возврат 1;
24+
ИначеЕсли Второй.Фолловеры > Первый.Фолловеры Тогда
25+
Возврат -1;
26+
Иначе
27+
Возврат 0;
28+
КонецЕсли;
2529

26-
ФильтрацияПоМестоположению = Новый ОписаниеОповещения("Обработчик_ФильтрацияПоМестоположению", ЭтотОбъект);
27-
СортировкаПоФолловерам = Новый ОписаниеОповещения("Обработчик_СортировкаПоФолловерам", ЭтотОбъект);
28-
СортировкаПоКонтрибьюциям = Новый ОписаниеОповещения("Обработчик_СортировкаПоКонтрибьюциям", ЭтотОбъект);
30+
КонецФункции
2931

32+
Функция Обработчик_СортировкаПоКонтрибьюциям(Первый, Второй) Экспорт
33+
34+
Если Первый.Контрибьюции > Второй.Контрибьюции Тогда
35+
Возврат 1;
36+
ИначеЕсли Второй.Контрибьюции > Первый.Контрибьюции Тогда
37+
Возврат -1;
38+
Иначе
39+
Возврат 0;
40+
КонецЕсли;
41+
42+
КонецФункции
43+
44+
ФильтрацияПоМестоположению = Новый Действие(ЭтотОбъект, "Обработчик_ФильтрацияПоМестоположению");
45+
СортировкаПоФолловерам = Новый Действие(ЭтотОбъект, "Обработчик_СортировкаПоФолловерам");
46+
СортировкаПоКонтрибьюциям = Новый Действие(ЭтотОбъект, "Обработчик_СортировкаПоКонтрибьюциям");
3047

3148
Таблица = Новый ТаблицаЗначений;
3249
Таблица.Колонки.Добавить("Имя");
@@ -43,7 +60,6 @@
4360
ДобавитьСтрокуВТаблицу("Лавочкин", 10, "Россия", 68);
4461
ДобавитьСтрокуВТаблицу("Яковлев", 12, "Россия", 99);
4562

46-
4763
ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Таблица);
4864
Результат = ПроцессорКоллекций
4965
.Фильтровать(ФильтрацияПоМестоположению)
@@ -58,12 +74,28 @@
5874
КонецЦикла;
5975

6076
ПроцессорыКоллекций.ИзКоллекции(Таблица)
61-
.Фильтровать("Результат = Элемент.Местоположение = ""Россия""")
62-
.Сортировать("Результат = Элемент1.Фолловеры < Элемент2.Фолловеры")
77+
.Фильтровать("Элемент -> Элемент.Местоположение = ""Россия""")
78+
.Сортировать("Первый, Второй ->
79+
| Если Первый.Фолловеры > Второй.Фолловеры Тогда
80+
| Возврат 1;
81+
| ИначеЕсли Второй.Фолловеры > Первый.Фолловеры Тогда
82+
| Возврат -1;
83+
| Иначе
84+
| Возврат 0;
85+
| КонецЕсли;"
86+
)
6387
.Первые(5)
64-
.Сортировать("Результат = Элемент1.Контрибьюции < Элемент2.Контрибьюции")
88+
.Сортировать("Первый, Второй ->
89+
| Если Первый.Контрибьюции > Второй.Контрибьюции Тогда
90+
| Возврат 1;
91+
| ИначеЕсли Второй.Контрибьюции > Первый.Контрибьюции Тогда
92+
| Возврат -1;
93+
| Иначе
94+
| Возврат 0;
95+
| КонецЕсли;"
96+
)
6597
.Первые(3)
66-
.ДляКаждого("Сообщить(Элемент.Имя)");
98+
.ДляКаждого("Элемент -> Сообщить(Элемент.Имя)");
6799

68100
// githubUsers
69101
// .filter(_.location == 'Russia')

examples/test.os

Lines changed: 20 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
#Использовать ".."
2-
#Использовать notify
32

4-
Процедура ОбработчикФильтрации(Результат, ДополнительныеПараметры) Экспорт
5-
Элемент = ДополнительныеПараметры.Элемент;
6-
Результат = Элемент > 3;
7-
КонецПроцедуры
3+
Функция ОбработчикФильтрации(Элемент) Экспорт
4+
Возврат Элемент > 3;
5+
КонецФункции
86

9-
Процедура ОбработчикОбработки(Результат, ДополнительныеПараметры) Экспорт
10-
Элемент = ДополнительныеПараметры.Элемент;
7+
Функция ОбработчикОбработки(Элемент) Экспорт
118
Результат = Элемент + 1;
129
Сообщить("Я - операция map, и это мое послание миру: элемент " + Элемент + " превратился в " + Результат);
13-
КонецПроцедуры
10+
Возврат Результат;
11+
КонецФункции
1412

15-
Процедура ОбработчикСокращения(Результат, ДополнительныеПараметры) Экспорт
16-
Элемент = ДополнительныеПараметры.Элемент;
17-
Результат = Результат + Элемент;
18-
КонецПроцедуры
13+
Функция ОбработчикСокращения(Результат, Элемент) Экспорт
14+
Возврат Результат + Элемент;
15+
КонецФункции
1916

20-
ФункцияФильтрации = Новый ОписаниеОповещения("ОбработчикФильтрации", ЭтотОбъект);
21-
ФункцияОбработки = Новый ОписаниеОповещения("ОбработчикОбработки", ЭтотОбъект);
22-
ФункцияСокращения = Новый ОписаниеОповещения("ОбработчикСокращения", ЭтотОбъект);
17+
ФункцияФильтрации = Новый Действие(ЭтотОбъект, "ОбработчикФильтрации");
18+
ФункцияОбработки = Новый Действие(ЭтотОбъект, "ОбработчикОбработки");
19+
ФункцияСокращения = Новый Действие(ЭтотОбъект, "ОбработчикСокращения");
2320

2421
Массив = Новый Массив;
2522
Массив.Добавить(3);
@@ -46,7 +43,7 @@
4643
ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив);
4744
ПроцессорКоллекций
4845
.Сортировать()
49-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
46+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
5047

5148
Массив = Новый Массив;
5249
Массив.Добавить(4);
@@ -59,7 +56,7 @@
5956
ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив);
6057
ПроцессорКоллекций
6158
.Различные()
62-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
59+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
6360

6461
ПроцессорКоллекций = ПроцессорыКоллекций.ИзКоллекции(Массив);
6562
Результат = ПроцессорКоллекций
@@ -73,19 +70,19 @@
7370
.ИзКоллекции(Массив)
7471
.Сортировать()
7572
.Первые(1)
76-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
73+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
7774
Сообщить(Массив[0]);
7875

7976
Строка = "ФЫВА";
8077
ПроцессорыКоллекций
8178
.ИзСтроки(Строка)
8279
.Сортировать()
83-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
80+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
8481

8582
Строка = "Я строка с пробелами";
8683
ПроцессорыКоллекций
8784
.ИзСтроки(Строка, " ")
88-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
85+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
8986

9087
Строка =
9188
|строка
@@ -94,19 +91,9 @@
9491
ПроцессорыКоллекций
9592
.ИзСтроки(Строка, Символы.ПС)
9693
.Сортировать()
97-
.ДляКаждого(ПроцессорыКоллекций.СтандартнаяФункцияОбработки_Сообщить());
94+
.ДляКаждого("Элемент -> Сообщить(Элемент)");
9895

9996
ПроцессорыКоллекций
10097
.ИзСтроки(Строка, Символы.ПС)
101-
.Фильтровать("Результат = СтрДлина(Элемент) > 1")
102-
.ДляКаждого("Сообщить(Элемент)");
103-
104-
// Структура = Новый Структура;
105-
// Структура.Вставить("Элемент1", 0);
106-
// Структура.Вставить("Элемент2", 1);
107-
// Структура.Вставить("Элемент3", 2);
108-
109-
// ПроцессорыКоллекций
110-
// .ИзКоллекции(Структура)
111-
// .Фильтровать("Результат = Элемент.Значение > 0")
112-
// .Получить(Тип("Структура"));
98+
.Фильтровать("Элемент -> СтрДлина(Элемент) > 1")
99+
.ДляКаждого("Элемент -> Сообщить(Элемент)");

packagedef

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11

22
Описание.Имя("fluent")
3-
.Версия("0.5.0")
3+
.Версия("0.6.0")
44
.Описание("Библиотека для работы с коллекциями в ""текучем"" стиле")
55
.Автор("Nikita Gryzlov")
66
.АдресАвтора("nixel2007@gmail.com")
77
.ВерсияСреды("1.0.18")
88
.ЗависитОт("logos")
99
.ЗависитОт("notify", "0.2.0")
10+
.ЗависитОт("lambdas", "0.1.2")
1011
.ЗависитОт("strings")
1112
.ЗависитОт("tempfiles")
13+
.РазработкаЗависитОт("1commands")
14+
.РазработкаЗависитОт("1testrunner")
15+
.РазработкаЗависитОт("coverage")
1216
.ВключитьФайл("examples")
1317
.ВключитьФайл("src")
1418
.ВключитьФайл("tasks")

sonar-project.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,4 @@ sonar.sources=./src
1414
# Encoding of the source code. Default is default system encoding
1515
sonar.sourceEncoding=UTF-8
1616

17-
sonar.coverageReportPaths=coverage/genericCoverage.xml
17+
sonar.coverageReportPaths=build/coverage/genericCoverage.xml

0 commit comments

Comments
 (0)