Skip to content

Произвольные аргументы конструктора

Иногда понимание того, что же еще добавить в поделку, приходит в самый последний момент. Буквально после запуска приложения, кодом, на основании какой-то хитрой логики. Да, можно сделать хитрый &Дуб, передать в него в виде желудя расчетчик этой самой бизнес-логики, который выдаст нужную циферку, но порой хочется просто передать 42 в конструктор желудя.

Для таких случаев в ОСени есть аннотация &Блестяшка.

bsl
&Желудь
Процедура ПриСозданииОбъекта(
    &Пластилин ПроверяторВерсий
    &Блестяшка ФормулировкаВопроса
)
КонецПроцедуры

Как ее использовать? Двумя способами. Первый - это передать все параметры конструктора в виде массива в метод Поделка.НайтиЖелудь():

bsl
ПараметрыКонструктора = Новый Массив;
ПараметрыКонструктора.Добавить(Поделка.НайтиЖелудь("ПроверяторВерсий"));
ПараметрыКонструктора.Добавить("Главный вопрос жизни, вселенной и всего такого");

ЛенивыйЖелудь = Поделка.НайтиЖелудь(
    "ЛенивыйЖелудь",
    ПараметрыКонструктора
);

Второй - передать только блестяшки. А весь &Пластилин и &Детальки ОСень подставит сама:

bsl
ПараметрыКонструктора = Новый Массив;
ПараметрыКонструктора.Добавить("Главный вопрос жизни, вселенной и всего такого");

ЛенивыйЖелудь = Поделка.НайтиЖелудь(
    "ЛенивыйЖелудь",
    ПараметрыКонструктора
);

&Блестяшки можно внедрять только в конструктор желудя. Внедрение в поля и методы жёлудя не поддерживается. Однако вы можете объявить &Дуб и &Завязь, куда &Блестяшку передать таки можно:

bsl
&Дуб
Процедура ПриСозданииОбъекта()
КонецПроцедуры

&Завязь
Процедура ЛенивыйЖелудь(
    &Пластилин ПроверяторВерсий
    &Блестяшка ФормулировкаВопроса
)
    ЛенивыйЖелудь = Новый ЛенивыйЖелудь(ПроверяторВерсий);
    ЛенивыйЖелудь.ЗадатьВопрос(ФормулировкаВопроса);

    Возврат ЛенивыйЖелудь;
КонецПроцедуры

И в заключение темы, ЛенивыйЖелудь (не важно, созданный конструктором или &Завязью) можно внедрить в другой желудь, воспользовавшись повторяемым параметром Блестяшка в аннотации &Пластилин:

bsl
&Пластилин(Блестяшка = "Шестью девять?")
Перем ЛенивыйЖелудь;

&Желудь
Процедура ПриСозданииОбъекта()
КонецПроцедуры

При поиске любителя ленивых желудей в него будет прилеплен ЛенивыйЖелудь с вопросом Шестью девять?.

Повторяемые параметры аннотаций позволяют указывать один и тот же параметр аннотации несколько раз с разными значениями. Например, если у желудя в конструктор принимается несколько блестяшек, то и внедрить такой желудь можно указав несколько блестяшек в аннотации &Пластилин:

bsl
&Пластилин(Блестяшка = "Первое значение", Блестяшка = "Второе значение")
Перем ЖелудьСДвумяБлестяшками;