Skip to content

Commit

Permalink
Реализована возможность обходить коллекции циклом Для каждого для д…
Browse files Browse the repository at this point in the history
…вижка версии 2.0
  • Loading branch information
sfaqer committed Aug 30, 2024
1 parent ca26824 commit 5dce575
Show file tree
Hide file tree
Showing 29 changed files with 452 additions and 4 deletions.
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@
КоллекшонОС это фреймворк коллекций для OneScript

## Особенности
Начиная с версии OneScript 2.0 появилась возможность обходить собственные классы коллекции циклом `Для каждого`, особенность описанная ниже актуальна для более ранних версий движка:

Так как в OneScript нет возможности сделать класс обходимым, то все представленные коллекции нельзя обойти циклом `Для каждого`, вместо этого вы можете воспользоваться итератором:

```bsl
Expand Down
2 changes: 1 addition & 1 deletion packagedef
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
Описание.Имя("collectionos")
.Версия("0.4.1")
.Версия("0.5.0")
.Автор("Кирилл Черненко")
.АдресАвтора("https://github.com/sfaqer")
.Описание("Фреймворк коллекций для OneScript")
Expand Down
1 change: 1 addition & 0 deletions src/internal/lib.config
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
<class name="ЧитаемыйСписок" file="Классы/Интерфейсы/ЧитаемыйСписок.os"/>
<class name="ЧитающийИтератор" file="Классы/Интерфейсы/ЧитающийИтератор.os"/>
<class name="ЧитающийСписокИтератор" file="Классы/Интерфейсы/ЧитающийСписокИтератор.os"/>
<class name="СлужебныйИтераторДляДвижка" file="Классы/Служебные/СлужебныйИтераторДляДвижка.os"/>

<class name="ИтераторЗначениеСоответствие" file="Классы/Итераторы/ИтераторЗначениеСоответствие.os"/>
<class name="ИтераторКлючСоответствие" file="Классы/Итераторы/ИтераторКлючСоответствие.os"/>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемаяКоллекция")
Процедура ПриСозданииОбъекта(пСоответствие, пИсточник)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемоеМножество")
Процедура ПриСозданииОбъекта(пСоответствие, пИсточник)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,11 @@

КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемоеМножество")
Процедура ПриСозданииОбъекта(пСоответствие, пИсточник)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
Перем ВнутреннийИтератор; // Реальный итератор

Функция Следующий() // BSLLS:UnusedLocalMethod-off
Возврат ВнутреннийИтератор.ЕстьСледующий();
КонецФункции

Функция ТекущийЭлемент() // BSLLS:UnusedLocalMethod-off
Возврат ВнутреннийИтератор.Следующий();
КонецФункции

&Итератор
Процедура ПриСозданииОбъекта(Итератор)
ВнутреннийИтератор = Итератор;
КонецПроцедуры
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Множество")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Множество")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Множество")
Процедура ПриСозданииОбъекта(Множество)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемоеМножество")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Коллекция")
Процедура ПриСозданииОбъекта(Коллекция)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -398,6 +398,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Список")
Процедура ПриСозданииОбъекта(Список)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -352,6 +352,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("Список")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемыйСписок")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,11 @@
КоллекцииСлужебный.ОбработчикПолученияПредставленияКоллекции(ЭтотОбъект, Представление, СтандартнаяОбработка);
КонецПроцедуры

Функция ПолучитьИтератор() // BSLLS:UnusedLocalMethod-off
Возврат Новый СлужебныйИтераторДляДвижка(Итератор());
КонецФункции

&Обходимое
&Реализует("ЧитаемаяКоллекция")
Процедура ПриСозданииОбъекта(Коллекция = Неопределено)

Expand Down
38 changes: 38 additions & 0 deletions tests/МножествоКарта.os
Original file line number Diff line number Diff line change
Expand Up @@ -905,6 +905,44 @@

КонецПроцедуры

&Тест
Процедура ОбходитсяЦикломДляКаждого() Экспорт

Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда
Возврат;
КонецЕсли;

// Дано

Соответствие = Новый Соответствие;
Соответствие.Вставить(1, Истина);
Соответствие.Вставить(2, Истина);

МножествоКарта = Новый МножествоКарта;

ВнутренняяКарта = Соответствия.КакКарта(Соответствие);
Соответствие = Рефлектор.ПолучитьСвойство(ВнутренняяКарта, "Соответствие");

Рефлектор.УстановитьСвойство(
МножествоКарта,
"ВнутренняяКарта",
ВнутренняяКарта
);

// Когда

// Тогда

Для каждого Элемент Из МножествоКарта Цикл

Ожидаем.Что(Элемент)
.БольшеИлиРавно(1)
.МеньшеИлиРавно(2);

КонецЦикла;

КонецПроцедуры

Функция БольшеИлиРавноДвум(Элемент) Экспорт
Два = 2;
Возврат Элемент >= Два;
Expand Down
35 changes: 35 additions & 0 deletions tests/МножествоСоответствие.os
Original file line number Diff line number Diff line change
Expand Up @@ -855,6 +855,41 @@

КонецПроцедуры

&Тест
Процедура ОбходитсяЦикломДляКаждого() Экспорт

Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда
Возврат;
КонецЕсли;

// Дано

Соответствие = Новый Соответствие;
Соответствие.Вставить(1, Истина);
Соответствие.Вставить(2, Истина);

МножествоСоответствие = Новый МножествоСоответствие;

Рефлектор.УстановитьСвойство(
МножествоСоответствие,
"Соответствие",
Соответствие
);

// Когда

// Тогда

Для каждого Элемент Из МножествоСоответствие Цикл

Ожидаем.Что(Элемент)
.БольшеИлиРавно(1)
.МеньшеИлиРавно(2);

КонецЦикла;

КонецПроцедуры

Функция БольшеИлиРавноДвум(Элемент) Экспорт
Два = 2;
Возврат Элемент >= Два;
Expand Down
25 changes: 25 additions & 0 deletions tests/СинхронизированнаяКоллекция.os
Original file line number Diff line number Diff line change
Expand Up @@ -555,6 +555,31 @@

КонецПроцедуры

&Тест
Процедура ОбходитсяЦикломДляКаждого() Экспорт

Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда
Возврат;
КонецЕсли;

// Дано

ПроверяемаяКоллекция = Новый СинхронизированнаяКоллекция(Список.ИзЭлементов(1, 2));

// Когда

// Тогда

Для каждого Элемент Из ПроверяемаяКоллекция Цикл

Ожидаем.Что(Элемент)
.БольшеИлиРавно(1)
.МеньшеИлиРавно(2);

КонецЦикла;

КонецПроцедуры

Функция БольшеИлиРавноДвум(Элемент) Экспорт
Два = 2;
Возврат Элемент >= Два;
Expand Down
25 changes: 25 additions & 0 deletions tests/СинхронизированноеМножество.os
Original file line number Diff line number Diff line change
Expand Up @@ -571,6 +571,31 @@

КонецПроцедуры

&Тест
Процедура ОбходитсяЦикломДляКаждого() Экспорт

Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда
Возврат;
КонецЕсли;

// Дано

ПроверяемаяКоллекция = Новый СинхронизированноеМножество(Множество.ИзЭлементов(1, 2));

// Когда

// Тогда

Для каждого Элемент Из ПроверяемаяКоллекция Цикл

Ожидаем.Что(Элемент)
.БольшеИлиРавно(1)
.МеньшеИлиРавно(2);

КонецЦикла;

КонецПроцедуры

Функция БольшеИлиРавноДвум(Элемент) Экспорт
Два = 2;
Возврат Элемент >= Два;
Expand Down
25 changes: 25 additions & 0 deletions tests/СинхронизированныйСписок.os
Original file line number Diff line number Diff line change
Expand Up @@ -887,6 +887,31 @@

КонецПроцедуры

&Тест
Процедура ОбходитсяЦикломДляКаждого() Экспорт

Если Не ТестМодуль.ЭтоДвижокВерсии2() Тогда
Возврат;
КонецЕсли;

// Дано

ПроверяемаяКоллекция = Новый СинхронизированныйСписок(Список.ИзЭлементов(1, 2));

// Когда

// Тогда

Для каждого Элемент Из ПроверяемаяКоллекция Цикл

Ожидаем.Что(Элемент)
.БольшеИлиРавно(1)
.МеньшеИлиРавно(2);

КонецЦикла;

КонецПроцедуры

Функция Инкремент(Элемент) Экспорт
Возврат Элемент + 1;
КонецФункции
Expand Down
Loading

0 comments on commit 5dce575

Please sign in to comment.