May 29, 2021 01:04
Этюд по выделению метода
Ниже представлено последовательноое выделение фрагмента кода в функцию при помощи Конфигуратора. Механизм рефакторинг-выделить фрагмент.
У кого есть под рукой EDT проверьте, там так же или умнее работает?
Исходник
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;
ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;
Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры
Делай раз
Выделяем расчет внешней переменной
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);
Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры
Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)
Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;
ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;
ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;
Возврат ЭтоСамаяВнешняяПеременная;
КонецФункции
Делай два
Аналогично выделяем расчет внутренней переменной
Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
НекаяФигня = Новый Массив;
ФигняВторогоУровня = Новый Массив;
ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);
Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры
Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)
Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;
ЭтоСамаяВнешняяПеременная = Неопределено;
Для Каждого Элемент из НекаяФигня Цикл
ПолучитьВнутреннюю(ФигняВторогоУровня, ЭтоВнутренняяПеременная);
ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
КонецЦикла;
Возврат ЭтоСамаяВнешняяПеременная;
КонецФункции
Процедура ПолучитьВнутреннюю(Знач ФигняВторогоУровня, ЭтоВнутренняяПеременная)
Перем ВнутреннийЭлемент;
ЭтоВнутренняяПеременная = Неопределено;
Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл
ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
КонецЦикла;
КонецПроцедуры
Внимание вопрос?
Q - почему первый раз функция (как и ожидалось), а второй раз процедура?
A - потому что в первом случае ЭтоСамаяВнешняяПеременная это только что объявленная переменная, а во втором - она есть в строке Перем
Q - А кто её туда поставил???
A - Упс…
Q - А зачем вообще смотреть на список Перем? Может только для того, чтобы стирать из него лишнее?
A - вы можете отправить своё предложение боту в телеграм. Да, даже про конфигуратор. Да, только отправить. Ждать чего либо не стоит.
1С