КоллекшонОС это фреймворк коллекций для OneScript
Начиная с версии OneScript 2.0 появилась возможность обходить собственные классы коллекции циклом Для каждого
, особенность описанная ниже актуальна для более ранних версий движка:
Так как в OneScript нет возможности сделать класс обходимым, то все представленные коллекции нельзя обойти циклом Для каждого
, вместо этого вы можете воспользоваться итератором:
СписокМассив = Новый СписокМассив;
СписокМассив.Добавить(1);
СписокМассив.Добавить(2);
СписокМассив.Добавить(3);
Итератор = СписокМассив.Итератор();
Пока Итератор.ЕстьСледующий() Цикл
Элемент = Итератор.Следующий();
Сообщить(Элемент);
КонецЦикла;
// > 1
// > 2
// > 3
classDiagram
direction LR
class Обходимое{
<<Интерфейс>>
+Итератор() ЧитающийИтератор
+ДляКаждого(Алгоритм: Действие) Ничто
}
class ЧитаемаяКоллекция{
<<Интерфейс>>
+Содержит(Элемент: Произвольный) Булево
+СодержитВсе(Коллекция: ЧитаемыйКоллекция) Булево
+Пусто() Булево
+ПроцессорКоллекции() ПроцессорКоллекций
+Количество() Число
}
class Коллекция{
<<Интерфейс>>
+Итератор() Итератор
+Добавить(Элемент: Произвольный) Булево
+ДобавитьВсе(Коллекция: ЧитаемыйКоллекция) Булево
+Очистить() Ничто
+Удалить(Элемент: Произвольный) Булево
+УдалитьВсе(Коллекция: ЧитаемыйКоллекция) Булево
+УдалитьЕсли(Предикат: Действие) Булево
+СохранитьВсе(Коллекция: ЧитаемыйКоллекция) Булево
+ВМассив() Массив
}
class ЧитаемоеМножество {
<<Интерфейс>>
}
class Множество {
<<Интерфейс>>
}
class ЧитаемыйСписок {
<<Интерфейс>>
+Получить(Индекс: Число) Произвольный
+Индекс(Элемент: Произвольный) Число
+ПоследнийИндекс(Элемент: Произвольный) Число
+ВГраница() Число
}
class Список {
<<Интерфейс>>
+Вставить(Индекс: Число, Элемент: Произвольный) Булево
+ВставитьВсе(Индекс: Число, Коллекция: ЧитаемыйКоллекция) Булево
+ЗаменитьВсе(Алгоритм: Действие) Ничто
+Сортировать(СравнениеЗначений: Действие) Ничто
+УдалитьПоИндексу(Индекс: Число) Произвольный
+Установить(Индекс: Число, Значение: Произвольный) Произвольный
}
class ФиксированнаяКоллекция {
-ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция)
}
class ФиксированноеМножество {
-ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция)
}
class МножествоСоответствие {
-ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция)
}
class ФиксированныйСписок {
-ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция)
}
class СписокМассив {
-ПриСозданииОбъекта(Коллекция: ЧитаемаяКоллекция)
}
class СинхронизированнаяКоллекция {
-ПриСозданииОбъекта(Коллекция: Коллекция)
}
class СинхронизированноеМножество {
-ПриСозданииОбъекта(Коллекция: Множество)
}
class СинхронизированныйСписок {
-ПриСозданииОбъекта(Коллекция: Список)
}
Обходимое <|-- ЧитаемаяКоллекция
ЧитаемаяКоллекция <|-- ФиксированнаяКоллекция
ЧитаемаяКоллекция <|-- Коллекция
ЧитаемаяКоллекция <|-- ЧитаемоеМножество
ЧитаемоеМножество <|-- Множество
Коллекция <|-- Множество
ЧитаемаяКоллекция <|-- ЧитаемыйСписок
Коллекция <|-- Список
ЧитаемыйСписок <|-- Список
Коллекция <|.. СинхронизированнаяКоллекция
ЧитаемоеМножество <|.. ФиксированноеМножество
Множество <|.. МножествоСоответствие
Множество <|.. СинхронизированноеМножество
ЧитаемыйСписок <|.. ФиксированныйСписок
Список <|.. СписокМассив
Список <|.. СинхронизированныйСписок
classDiagram
class ЧитаемаяКарта {
<<Интерфейс>>
+СодержитКлюч(Ключ: Произвольный) Булево
+СодержитЗначение(Значение: Произвольный) Булево
+ДляКаждого(Алгоритм: Действие) Ничто
+Получить(Ключ: Произвольный) Опциональный~Произвольный~
+ПолучитьИлиУмолчание(Ключ: Произвольный, ЗначениеПоУмолчанию: Произвольный) Произвольный
+Пусто() Булево
+Ключи() ЧитаемоеМножество~Произвольный~
+Значения() ЧитаемыйСписок~Произвольный~
+КлючиИЗначения() ЧитаемоеМножество~Произвольный~
+Количество() Число
}
class Карта {
<<Интерфейс>>
+Очистить() Ничто
+Вставить(Ключ: Произвольный, Значение: Произвольный) Опциональный~Произвольный~
+ВставитьВсе(Карта: ЧитаемыйКарта) Ничто
+ВставитьЕслиОтсутствует(Ключ: Произвольный, Значение: Произвольный) Опциональный~Произвольный~
+ВычислитьБезусловно(Ключ: Произвольный, ФункцияПереназначения: Действие) Опциональный~Произвольный~
+ВычислитьЕслиОтсутствует(Ключ: Произвольный, ФункцияНазначения: Действие) Опциональный~Произвольный~
+ВычислитьЕслиПрисутствует(Ключ: Произвольный, ФункцияПереназначения: Действие) Опциональный~Произвольный~
+Слить(Ключ: Произвольный, Значение: Произвольный, ФункцияПереназначения: Действие) Опциональный~Произвольный~
+Заменить(Ключ: Произвольный, Значение: Произвольный) Опциональный~Произвольный~
+ЗаменитьЕслиЗначение(Ключ: Произвольный, ПрошлоеЗначение: Произвольный, Значение: Произвольный) Булево
+ЗаменитьВсе(ФункцияПереназначения: Действие) Булево
+Удалить(Ключ: Произвольный) Опциональный~Произвольный~
}
class ФиксированнаяКарта {
-ПриСозданииОбъекта(Карта: ЧитаемаяКарта)
}
class КартаСоответствие {
-ПриСозданииОбъекта(Карта: ЧитаемаяКарта)
}
class СинхронизированнаяКарта {
-ПриСозданииОбъекта(Карта: Карта)
}
ЧитаемаяКарта <|-- Карта
ЧитаемаяКарта <|.. ФиксированнаяКарта
Карта <|.. КартаСоответствие
Карта <|.. СинхронизированнаяКарта
classDiagram
class ЧитающийИтератор {
<<Интерфейс>>
+ЕстьСледующий() Булево
+Следующий() Произвольный
+ДляКаждогоОставшегося(Действие: Действие) Ничто
}
class Итератор {
<<Интерфейс>>
+Удалить() Ничто
}
class ЧитающийСписокИтератор {
<<Интерфейс>>
+ЕстьПредыдущий() Булево
+Предыдущий() Произвольный
+СледующийИндекс() Число
+ПредыдущийИндекс() Число
}
class СписокИтератор {
<<Интерфейс>>
+Установить(Элемент) Ничто
+Вставить(Элемент) Ничто
}
class ФиксированныйСписокИтератор {
-ПриСозданииОбъекта(Итератор: СписокИтератор) Ничто
}
class ИтераторМассив {
-ПриСозданииОбъекта(Массив: Массив, Источник: Обходимое|Карта) Ничто
}
class ФиксированныйИтератор {
-ПриСозданииОбъекта(Итератор: Итератор) Ничто
}
class ИтераторСоответствие {
-ПриСозданииОбъекта(Соответствие: Соответствие, Источник: Обходимое|Карта) Ничто
}
class ИтераторКлючСоответствие {
-ПриСозданииОбъекта(Соответствие: Соответствие, Источник: Обходимое|Карта) Ничто
}
class ИтераторЗначениеСоответствие {
-ПриСозданииОбъекта(Соответствие: Соответствие, Источник: Обходимое|Карта) Ничто
}
ЧитающийИтератор <|-- Итератор
ЧитающийИтератор <|-- ЧитающийСписокИтератор
ЧитающийСписокИтератор <|-- СписокИтератор
ЧитающийСписокИтератор <|.. ФиксированныйСписокИтератор
СписокИтератор <|.. ИтераторМассив
ЧитающийИтератор <|.. ФиксированныйИтератор
Итератор <|.. ИтераторСоответствие
Итератор <|.. ИтераторКлючСоответствие
Итератор <|.. ИтераторЗначениеСоответствие
// Проверяет что есть следующий элемент коллекции
//
// Возвращаемое значение:
// Булево - Истина, если есть следующий элемент коллекции
//
Функция ЕстьСледующий()
// Возвращает следующий элемент коллекции
//
// Возвращаемое значение:
// Произвольный - следующий элемент коллекции
//
Функция Следующий()
// Выполняет переданный алгоритм для каждого элемента коллекции
// начиная с того на который указывает итератор
//
// Параметры:
// Действие - Действие - Делегат на процедуру с одним параметром
// которая принимает элемент коллекции
// - Строка - Лямбда выражение с одним параметром
// которая принимает элемент коллекции
//
// Пример:
// Итератор.ДляКаждогоОставшегося(Элемент -> Сообщить(Элемент));
//
Процедура ДляКаждогоОставшегося(Действие)
// Удаляет элемент на который указывает итератор
//
Процедура Удалить()
// Проверяет что есть предыдущий элемент коллекции
//
// Возвращаемое значение:
// Булево - Истина, если есть предыдущий элемент коллекции
//
Функция ЕстьПредыдущий()
// Возвращает предыдущий элемент коллекции
//
// Возвращаемое значение:
// Произвольный - предыдущий элемент коллекции
//
Функция Предыдущий()
// Возвращает индекс на который указывает итератор
//
// Возвращаемое значение:
// Число - Индекс на который указывает итератор
//
Функция СледующийИндекс()
// Возвращает предыдущий индекс от того на который указывает итератор
//
// Возвращаемое значение:
// Число - Предыдущий индекс от того на который указывает итератор
//
Функция ПредыдущийИндекс()
// Заменяет значение на которое указывает итератор
//
// Параметры:
// Элемент - Произвольный - Устанавливаемый элемент
//
Процедура Установить(Элемент)
// Вставляет элемент по месту указания итератора
//
// Параметры:
// Элемент - Произвольный - вставляемый элемент
//
Процедура Вставить(Элемент)
// Возвращает итератор коллекции
//
// Возвращаемое значение:
// Итератор - Итератор коллекции
//
Функция Итератор()
// Выполняет переданный алгоритм для каждого элемента коллекции
//
// Параметры:
// Алгоритм - Действие - Делегат на процедуру с одним параметром, в который
// будет передан элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который будет
// будет передан элемент коллекции
//
// Пример:
// Обходимое.ДляКаждого("Элемент -> Сообщить(Элемент)");
//
Процедура ДляКаждого(Алгоритм)
// Проверяет содержится ли указанный элемент в коллекции
//
// Параметры:
// Элемент - Произвольный - Проверяемый элемент
//
// Возвращаемое значение:
// Булево - Истина, если коллекция содержит указанный элемент
//
Функция Содержит(Элемент)
// Проверяет что коллекция содержит все элементы переданной коллекции
//
// Параметры:
// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой проверяются на вхождение
//
// Возвращаемое значение:
// Булево - Истина, если коллекция содержит все элементы переданной коллекции
//
Функция СодержитВсе(Коллекция)
// Проверяет что коллекция пустая
//
// Возвращаемое значение:
// Булево - Истина, если коллекция пуста
//
Функция Пусто()
// Возвращает процессор коллекции по текущей коллекции
//
// Возвращаемое значение:
// ПроцессорКоллекций - Процессор коллекции
//
Функция ПроцессорКоллекции()
// Возвращает количество элементов коллекции
//
// Возвращаемое значение:
// Число - Количество элементов коллекции
//
Функция Количество()
// Выгружает элементы коллекции в массив
//
// Возвращаемое значение:
// Массив из Произвольный - массив элементов коллекции
//
Функция ВМассив()
// Добавляет элемент в коллекцию
//
// Параметры:
// Элемент - Произвольный - Добавляемый элемент
//
// Возвращаемое значение:
// Булево - Истина, если элемент добавлен
//
Функция Добавить(Элемент)
// Добавляет все элементы из переданной коллекции
//
// Параметры:
// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой требуется добавить
//
// Возвращаемое значение:
// Булево - Истина, если был добавлен хотя бы один элемент
//
Функция ДобавитьВсе(Коллекция)
// Очищает коллекцию
//
Процедура Очистить()
// Удаляет переданный элемент из коллекции
//
// Параметры:
// Элемент - Произвольный - Удаляемый элемент
//
// Возвращаемое значение:
// Булево - Истина, если элемент был удалён
//
Функция Удалить(Элемент)
// Удаляет все элементы которые содержаться в переданной коллекции
//
// Параметры:
// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут удалены
//
// Возвращаемое значение:
// Булево - Истина, если был удалён хотя бы один элемент
//
Функция УдалитьВсе(Коллекция)
// Удаляет элементы для которых функция предикат вернёт Истина
//
// Параметры:
// Предикат - Действие - Делегат на функцию с одним параметром, в которой передаётся элемент коллекции
// - Строка - Лямбда выражение с одним параметром, в который передаётся элемент коллекции
//
// Пример:
// Коллекция.УдалитьЕсли("(Элемент) -> Элемент >= 2");
//
// Возвращаемое значение:
// Булево - Истина, если был удалён хотя бы один элемент
//
Функция УдалитьЕсли(Предикат)
// Удаляет все элементы которые не содержаться в переданной коллекции
//
// Параметры:
// Коллекция - ЧитаемыйКоллекция - Коллекция, элементы которой будут сохранены
//
// Возвращаемое значение:
// Булево - Истина, если был удалён хотя бы один элемент
//
Функция СохранитьВсе(Коллекция)
// Получает элемент коллекции по индексу
//
// Параметры:
// Индекс - Число - Индекс, по которому требуется получить элемент списка
//
// Возвращаемое значение:
// Произвольный - элемент списка по переданному индексу
//
Функция Получить(Индекс)
// Возвращает индекс первого вхождения переданного элемента
//
// Параметры:
// Элемент - Произвольный - Элемент, индекс которого требуется получить
//
// Возвращаемое значение:
// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент
//
Функция Индекс(Элемент)
// Возвращает индекс последнего вхождения переданного элемента
//
// Параметры:
// Элемент - Произвольный - Элемент, индекс которого требуется получить
//
// Возвращаемое значение:
// Число - Индекс элемента коллекции, или -1 если коллекция не содержит элемент
//
Функция ПоследнийИндекс(Элемент)
// Возвращает максимальный индекс списка
//
// Возвращаемое значение:
// Число - максимальный индекс списка
//
Функция ВГраница()
// Вставляет элемент в список по индексу
//
// Параметры:
// Индекс - Число - Индекс, по которому будет вставлен элемент
// Элемент - Произвольный - Вставляемый элемент
//
// Возвращаемое значение:
// Булево - Истина, если элемент вставлен
//
Функция Вставить(Индекс, Элемент)
// Вставляет все элементы из коллекции начиная с индекса
//
// Параметры:
// Индекс - Число - Индекс, начиная с которого будет вставлены элементы
// Коллекция - ЧитаемыйКоллекция - Коллекция, из которой будут вставлены элементы
//
// Возвращаемое значение:
// Булево - Истина, если был вставлен хотя бы один элемент
//
Функция ВставитьВсе(Индекс, Коллекция)
// Заменяет все элементы в списке через алгоритм
//
// Параметры:
// Алгоритм - Действие - Делегат на функцию с одним параметром, в которую передаётся
// элемент списка, и которая возвращает новое значение элемента
// - Строка - Лямбда выражение с одним параметром, в который передаётся
// элемент списка, и которая возвращает новое значение элемента
//
// Пример:
// Список.ЗаменитьВсе("Элемент -> Элемент + 1");
//
Процедура ЗаменитьВсе(Алгоритм)
// Сортирует список в соответствии с переданным алгоритмом
//
// Параметры:
// СравнениеЗначений - Действие - Делегат на функцию с двумя параметрами
// в которую передаются 2 элемента коллекции, и которая возвращает число
// 1 - Если первый элемент больше,
// -1 - Если второй элемент больше,
// 0 - Если элементы равны
// - Строка - Лямбда выражение с двумя параметрами
// в которую передаются 2 элемента коллекции, и которая возвращает число
// 1 - Если первый элемент больше,
// -1 - Если второй элемент больше,
// 0 - Если элементы равны
//
// Пример:
// Список.Сортировать("Первый, Второй -> {
// | Если Первый > Второй Тогда
// | Возврат 1;
// | ИначеЕсли Второй > Первый Тогда
// | Возврат -1;
// | Иначе
// | Возврат 0;
// | КонецЕсли;
// |}"
// );
//
// Удаляет элемент списка по индексу
//
// Параметры:
// Индекс - Число - Индекс удаляемого элемента
//
// Возвращаемое значение:
// Произвольный - Значение которое было удалено
//
Функция УдалитьПоИндексу(Индекс)
// Устанавливает значение по индексу
//
// Параметры:
// Индекс - Число - Индекс устанавливаемого элемента
// Значение -Произвольный - Устанавливаемый элемент
//
// Возвращаемое значение:
// Произвольный - Значение которое было заменено
//
Функция Установить(Индекс, Значение)
// Проверяет что карта содержит переданный ключ
//
// Параметры:
// Ключ - Произвольный - Проверяемый ключ
//
// Возвращаемое значение:
// Булево - Истина, если карта содержит указанный ключ
//
Функция СодержитКлюч(Ключ)
// Проверяет что карта содержит указанное значение
//
// Параметры:
// Значение - Произвольный - Проверяемое значение
//
// Возвращаемое значение:
// Булево - Истина, если карта содержит указанное значение
//
Функция СодержитЗначение(Значение)
// Выполняет переданное действие для каждого элемента карты
//
// Параметры:
// Алгоритм - Действие - Делегат на метод с двумя параметрами который будет выполнятся
// в первый параметр передаётся ключ во второй значение
// - Строка - Лямбда выражение с двумя параметрами в первый параметр передаётся ключ во второй значение
//
// Пример:
// Карта.ДляКаждого("(Ключ, Значение) -> Сообщить(СтрШаблон(""Ключ: %1, Значение:2"", Ключ, Значение))");
//
Процедура ДляКаждого(Алгоритм)
// Возвращает значение по ключу карты
//
// Параметры:
// Ключ - Произвольный - Ключ, по которому требуется получить значение
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Опциональный, в котором содержится полученное значение или
// пустой опциональный, если карта не содержит указанного ключа
//
Функция Получить(Ключ)
// Возвращает значение по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ
//
// Параметры:
// Ключ - Произвольный - Ключ, по которому требуется получить значение
// ЗначениеПоУмолчанию - Произвольный - Значение, которое будет возвращено если карта не содержит ключ
//
// Возвращаемое значение:
// Произвольный<Произвольный> - Значение полученное по ключу карты, или ЗначениеПоУмолчанию если карта не содержит ключ
//
Функция ПолучитьИлиУмолчание(Ключ, ЗначениеПоУмолчанию)
// Возвращает признак того что карта не содержит пар КлючИЗначение
//
// Возвращаемое значение:
// Булево - Истина, если карта не содержит пар КлючИЗначение
//
Функция Пусто()
// Возвращает множество ключей содержащихся в карте
//
// Возвращаемое значение:
// ЧитаемоеМножество - Множество ключей содержащихся в карте
//
Функция Ключи()
// Возвращает коллекцию значений содержащихся в карте
//
// Возвращаемое значение:
// ЧитаемаяКоллекция - Коллекция значений содержащихся в карте
//
Функция Значения()
// Возвращает множество пар КлючИЗначение содержащихся в карте
//
// Возвращаемое значение:
// ЧитаемоеМножество - Множество пар КлючИЗначение содержащихся в карте
//
Функция КлючиИЗначения()
// Возвращает количество пар КлючИЗначение содержащихся в карте
//
// Возвращаемое значение:
// Число - Количество пар КлючИЗначение содержащихся в карте
//
Функция Количество()
// Удаляет все элементы карты
//
Процедура Очистить()
// Вставляет в карту переданную пару ключ и значение
//
// Параметры:
// Ключ - Произвольный - Вставляемый ключ
// Значение - Произвольный - Вставляемое значение
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Значение, ранее было связанное с ключом
//
Функция Вставить(Ключ, Значение)
// Вставляет все значения из переданной карты
//
// Параметры:
// Карта - Карта - Карта, значения из которой вставляются
//
Процедура ВставитьВсе(Карта)
// Вставляет в карту переданную пару ключ и значение, если карта не содержит переданного ключа
//
// Параметры:
// Ключ - Произвольный - Вставляемый ключ
// Значение - Произвольный - Вставляемое значение
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Значение, связанное с ключом, пустой если карта не содержала ключа
//
Функция ВставитьЕслиОтсутствует(Ключ, Значение)
// Вычисляет значение для переданного ключа через функцию переназначения, если функция вернёт значение
// то оно будет вставлено по указанному ключу, если функция вернёт Неопределено, то из карты будет удалён
// переданный ключ, если ранее карта его содержала
//
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет)
// - Строка - Лямбда выражение с двумя параметрами в которую будут переданы ключ
// и Опциональный от текущего значения ключа (пустой если ключа нет)
//
// Пример:
// Карта.ВычислитьБезусловно("Ключ", "(Ключ, Значение) -> ?(Значение.Пустой(), Истина, Ложь)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
//
Функция ВычислитьБезусловно(Ключ, ФункцияПереназначения)
// Вычисляет значение для переданного ключа, если текущая карта не содержит переданного ключа,
// через функцию назначения, функция будет вызвана только если карта не содержит ключа,
// если функция вернёт значение, оно будет вставлено в карту по указанному ключу,
// если функция вернёт Неопределенно, то значение вставлено не будет
//
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияНазначения - Действие - Делегат на функцию с одним параметром, в которую передаётся переданный ключ
// - Строка - Лямбда выражение с одним параметром в который будет передан переданный ключ
//
// Пример:
// Карта.ВычислитьЕслиОтсутствует("Ключ", "(Ключ) -> СтрДлина(Ключ)")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа если оно было вычислено, или текущее значение ключа
// если карта уже содержала переданный ключ
//
Функция ВычислитьЕслиОтсутствует(Ключ, ФункцияНазначения)
// Вычисляет значение для переданного ключа, если текущая карта содержит переданный ключ,
// через функцию переназначения, функция будет вызвана только если карта содержит ключ,
// если функция вернёт значение, оно будет вставлено в карту по указанному ключу,
// если функция вернёт Неопределенно, то ключ будет удалён из карты
//
// Параметры:
// Ключ - Произвольный - Ключ, для которого вычисляется значение
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую передаются ключ
// и текущее значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются ключ и текущее
// значение ключа
//
// Пример:
// Карта.ВычислитьЕслиПрисутствует("Ключ", "(Ключ, Значение) -> {
// | Если Ключ = ""Ключ"" Тогда
// | Возврат СтрДлина(Значение.Получить());
// | Иначе
// | Возврат Неопределенно;
// | КонецЕсли;
// |}"
// );
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
//
Функция ВычислитьЕслиПрисутствует(Ключ, ФункцияПереназначения)
// Объединяет текущее и переданное значение по указанному ключу через функцию переназначения,
// функция будет вызвана только если существует текущее значение ключа, в ином случае будет вставлено значение
// если функция вернёт значение, оно будет вставлено в карту по указанному ключу,
// если функция вернёт Неопределенно, то ключ будет удалён из карты
//
// Параметры:
// Ключ - Произвольный - Ключ, значения для которого требуется объединить
// Значение - Произвольный - Новое значение ключа
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами в которые передаются
// существующее и новое значение ключа
// - Строка - Лямбда выражение с двумя параметрами в которые передаются
// существующее и новое значение ключа
//
// Пример:
// Карта.Слить("Ключ", 4, "(СуществующееЗначение, НовоеЗначение) ->
// | Возврат ?(НовоеЗначение > СуществующееЗначение,
// | НовоеЗначение,
// | СуществующееЗначение
// | );")
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Новое значение ключа
//
Функция Слить(Ключ, Значение, ФункцияПереназначения)
// Заменяет значение по переданному ключу, если ключа в карте нет, то замена не происходит
//
// Параметры:
// Ключ - Произвольный - Ключ, значение которого требуется заменить
// Значение - Произвольный - Новое значение ключа
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Прошлое значение ключа, или пустой, если ключа не было
//
Функция Заменить(Ключ, Значение)
// Заменяет значение по переданному ключу с проверкой текущего значения,
// если ключа в карте нет, то замена не происходит
//
// Параметры:
// Ключ - Произвольный - Ключ, значение которого требуется заменить
// ПрошлоеЗначение - Произвольный - Значение, которое должно быть связано с ключом для замены
// Значение - Произвольный - Новое значение ключа
//
// Возвращаемое значение:
// Булево - Истина, если замена была произведена
//
Функция ЗаменитьЕслиЗначение(Ключ, ПрошлоеЗначение, Значение)
// Заменяет значение для всех ключей карты, через функцию переназначения
//
// Параметры:
// ФункцияПереназначения - Действие - Делегат на функцию с двумя параметрами, в которую
// передаются ключ и значение ключа
// - Строка - Лямбда выражение с двумя параметрами, в которые передаются
// ключ и значение ключа
//
// Пример:
// Карта.ЗаменитьВсе("(Ключ, Значение) -> Значение + 1")
//
Процедура ЗаменитьВсе(ФункцияПереназначения)
// Удаляет переданный ключ из карты
//
// Параметры:
// Ключ - Произвольный - Удаляемый ключ
//
// Возвращаемое значение:
// Опциональный<Произвольный> - Значение, ранее было связанное с ключом
//
Функция Удалить(Ключ)