Найти в Дзене

Ранний выход/возврат

Ранний выход/возврат Если встречаете вот такой код: Если (Условие) Тогда // Дальше выполняется // какой-то длинный код // с множеством методов КонецЕсли; Или вот такой: Если (Условие) Тогда Если Не (ДругоеУсловие) Тогда // Дальше выполняется // какой-то длинный код // с множеством методов КонецЕсли; КонецЕсли; В нем можно легко запутаться, так как нужно постоянно держать в голове контекст выполнения условия. А если код еще и длинный, то можно забыть, что за условия были вверху. Вместо этого лучше использовать ранний выход или охранные выражения: Если Не (Условие) Или (ДругоеУсловие) Тогда Возврат; КонецЕсли; // Дальше выполняется какой-то длинный код Такой код проще читать. Он вначале задает условия прежде чем переходить к детялям. В этом случае у нас не будет лишней вложенности. Пример: Код: Если ЭтоНовый Тогда Если Не ЭтоГруппа Тогда ПодготовитьФормуОбъекта(); УстановитьСвойстваТабличнойЧасти(); УправлениеФормой(); // Еще какой-то код КонецЕсли; КонецЕсли; меняем на: Есл

Ранний выход/возврат

Если встречаете вот такой код:

Если (Условие) Тогда

// Дальше выполняется

// какой-то длинный код

// с множеством методов

КонецЕсли;

Или вот такой:

Если (Условие) Тогда

Если Не (ДругоеУсловие) Тогда

// Дальше выполняется

// какой-то длинный код

// с множеством методов

КонецЕсли;

КонецЕсли;

В нем можно легко запутаться, так как нужно постоянно держать в голове контекст выполнения условия. А если код еще и длинный, то можно забыть, что за условия были вверху.

Вместо этого лучше использовать ранний выход или охранные выражения:

Если Не (Условие) Или (ДругоеУсловие) Тогда

Возврат;

КонецЕсли;

// Дальше выполняется какой-то длинный код

Такой код проще читать. Он вначале задает условия прежде чем переходить к детялям. В этом случае у нас не будет лишней вложенности.

Пример:

Код:

Если ЭтоНовый Тогда

Если Не ЭтоГруппа Тогда

ПодготовитьФормуОбъекта();

УстановитьСвойстваТабличнойЧасти();

УправлениеФормой();

// Еще какой-то код

КонецЕсли;

КонецЕсли;

меняем на:

Если Не ЭтоНовый Или ЭтоГруппа Тогда

Возврат;

КонецЕсли;

ПодготовитьФормуОбъекта();

УстановитьСвойстваТабличнойЧасти();

УправлениеФормой();

// Еще какой-то код

Особенности:

1. Если проверок становится много (больше 5), то лучше их выделить в отдельную функцию условие:

Если Не НужноОбработатьОбъект() Тогда

Возврат;

КонецЕсли;

// Дальше выполняется

// какой-то длинный код

// с множеством методов

2. Будьте внимательны с кодом:

Если (Условие) Тогда

// Какой-то код

КонецЕсли;

// Дальше другой код

В этом случае использование раннего выхода не всегда оправдано.

3. Лучше выделять условия по одному, чтобы не запутаться и не потерять. Допустимо сначала сделать последовательные условия, например:

Если (Условие) Тогда

Возврат;

КонецЕсли;

Если Не (ДругоеУсловие) Тогда

Возврат;

КонецЕсли;

// Дальше выполняется

// какой-то длинный код

// с множеством методов

Лайк, шер, сабскрайб, репост