Как стать автором
Обновить

Сокращение уровня вложенности

Время на прочтение4 мин
Количество просмотров5.6K
Иногда от посторонних людей достаются большие процедуры, от которых появляется большая головная боль.
Например, когда мне досталась на переработку километровая процедура 1С. В целом, она выглядела примерно так:

Процедура Проверка()
    Если (Условие1) Тогда
        // первый блок
        // кода
        Если (Условие2) Тогда
            Для Переменная = 1 По Справочник() Цикл
                Если (Условие3) Тогда
                    // второй блок
                    // кода
                    Если (Условие4) Тогда
                        // третий блок
                        // кода
                    КонецЕсли;
                КонецЕсли;
            КонецЦикла;
        КонецЕсли;
    КонецЕсли;
КонецПроцедуры


Стоит отметить, что исходная страшилка имела примерно те же уровни вложенностей, но не умещалась и на 4 экранах. Плюс к этому, табуляция хромала… сказать по правде, настроение упало ниже плинтуса, когда понадобилось найти границы блоков «Если … КонецЕсли». С табуляцией разобрался, процедуру урезал до следующего вида:

Процедура Проверка()
    Если (Не Условие1) Тогда
        Возврат;
    КонецЕсли;

    // первый блок
    // кода

    Если (Не Условие2) Тогда
        Возврат;
    КонецЕсли;

    Для Переменная = 1 По Справочник() Цикл
        Если (Не Условие3) Тогда
            Продолжить;
        КонецЕсли;

        // второй блок
        // кода

        Если (Условие4) Тогда
            // третий блок
            // кода
        КонецЕсли;
    КонецЦикла;
КонецПроцедуры


Поначалу хотел и третий блок кода вынести из проверки, но передумал. Читабельность, на мой взгляд, от такого только ухудшается. Насчёт Условие2 ещё можно подумать. А вот первую и третью проверки, на мой взгляд, грех не сократить.

Почему-то, команда выхода из процедуры (или возврата к началу цикла) всё равно не всегда и не всеми приветствуется. Даже тогда, когда была бы нагляднее и в целом уместнее, чем лишний таб до конца процедуры. А впрочем, не даром что одному хорошо, то другому — смерть. Может просто у меня такой неправильный вкус.

P.S. А что, в блоке <code> уже запрещено подкрашивать текст? Жаль, смотрелось приятнее)

Добавлено 27-10-2007 20:30
Подумал, и решил, что для меня лучший вариант — фильтр входных условий и вложенность последующих, т.е.
Процедура Проверка()
    Если (Не Условие1) Тогда
        Возврат;
    КонецЕсли;

    // первый блок
    // кода

    Если (Условие2) Тогда
      Для Переменная = 1 По Справочник() Цикл
          Если (Не Условие3) Тогда
              Продолжить;
          КонецЕсли;

          // второй блок
          // кода

          Если (Условие4) Тогда
              // третий блок
              // кода
          КонецЕсли;
      КонецЦикла;
    КонецЕсли;
КонецПроцедуры


Upd @ 07.11.07
Кстати, в том же Пёрле, кажется, вполне приветствуется своевременная суицидальность скриптов, если условие не выполняется — die "Reason" :-D
Теги:
Хабы:
+8
Комментарии96

Публикации

Изменить настройки темы

Истории

Ближайшие события

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн