ndochp (ndochp) wrote,
ndochp
ndochp

Рефакторинг в 1С. Этюд по выделению метода

Этюд по выделению метода

Ниже представлено последовательноое выделение фрагмента кода в функцию при помощи Конфигуратора. Механизм рефакторинг-выделить фрагмент.
У кого есть под рукой EDT проверьте, там так же или умнее работает?

Исходник


Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
 НекаяФигня = Новый Массив;
 ФигняВторогоУровня = Новый Массив;
 ЭтоСамаяВнешняяПеременная = Неопределено;
 Для Каждого Элемент из НекаяФигня Цикл 
  ЭтоВнутренняяПеременная = Неопределено;
  Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл 
   ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
  КонецЦикла;
  ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
 КонецЦикла;
 
 Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Делай раз

Выделяем расчет внешней переменной

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    НекаяФигня = Новый Массив;
    ФигняВторогоУровня = Новый Массив;
    ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);

    Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)
    
    Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;
    
    ЭтоСамаяВнешняяПеременная = Неопределено;
    Для Каждого Элемент из НекаяФигня Цикл 
        ЭтоВнутренняяПеременная = Неопределено;
        Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл 
            ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
        КонецЦикла;
        ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
    КонецЦикла;
    Возврат ЭтоСамаяВнешняяПеременная;
    
КонецФункции

Делай два

Аналогично выделяем расчет внутренней переменной

Процедура ОбработкаПроверкиЗаполнения(Отказ, ПроверяемыеРеквизиты)
    НекаяФигня = Новый Массив;
    ФигняВторогоУровня = Новый Массив;
    ЭтоСамаяВнешняяПеременная = ПолучитьВнешнюю(НекаяФигня, ФигняВторогоУровня);
    
    Сообщить(ЭтоСамаяВнешняяПеременная);
КонецПроцедуры

Функция ПолучитьВнешнюю(Знач НекаяФигня, Знач ФигняВторогоУровня)
    
    Перем ВнутреннийЭлемент, Элемент, ЭтоВнутренняяПеременная, ЭтоСамаяВнешняяПеременная;
    
    ЭтоСамаяВнешняяПеременная = Неопределено;
    Для Каждого Элемент из НекаяФигня Цикл 
        ПолучитьВнутреннюю(ФигняВторогоУровня, ЭтоВнутренняяПеременная);

        ЭтоСамаяВнешняяПеременная = ЭтоВнутренняяПеременная;
    КонецЦикла;
    Возврат ЭтоСамаяВнешняяПеременная;
    
КонецФункции

Процедура ПолучитьВнутреннюю(Знач ФигняВторогоУровня, ЭтоВнутренняяПеременная)
    
    Перем ВнутреннийЭлемент;
    
    ЭтоВнутренняяПеременная = Неопределено;
    Для Каждого ВнутреннийЭлемент Из ФигняВторогоУровня Цикл 
        ЭтоВнутренняяПеременная = ВнутреннийЭлемент;
    КонецЦикла;
    
КонецПроцедуры

Внимание вопрос?

Q - почему первый раз функция (как и ожидалось), а второй раз процедура?
A - потому что в первом случае ЭтоСамаяВнешняяПеременная это только что объявленная переменная, а во втором - она есть в строке Перем
Q - А кто её туда поставил???
A - Упс…
Q - А зачем вообще смотреть на список Перем? Может только для того, чтобы стирать из него лишнее?
A - вы можете отправить своё предложение боту в телеграм. Да, даже про конфигуратор. Да, только отправить. Ждать чего либо не стоит.
Tags:
Subscribe

  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments