Следует избегать чрезмерной вложенности кода 🪆.
“If you need more than 3 levels of indentation, you’re screwed anyway, and should fix your program” – linux coding style guide
«Если вам потребовалось более 3-x уровней вложенности, то, скорее всего, вы и так уже в тупике и должны переписать вашу программу» – Linux руководство по стилю программирования
Примеры вложенности
Одноуровневая вложенность
function result = calculate(bottom, top)
result = bottom + top;
end
Двухуровневая вложенность
function result = calculate(bottom, top)
if top > bottom
result = top + bottom;
else
result = 0;
end
end
Трехуровневая вложенность
function result = calculate(bottom, top)
if top > bottom
sum = 0;
for number = bottom:top
sum = sum + number;
end
result = sum;
else
result = 0;
end
end
4-ех уровневая вложенность 😖
function result = calculate(bottom, top)
if top > bottom
sum = 0;
for number = bottom:top
if mod(number, 2) == 0
sum = sum + number;
end
end
result = sum;
else
result = 0;
end
end
Способы “разложения”
- Извлечение: выделение части функции в отдельную функцию
- Инверсия: перестановка и инвертирование условий + переход к раннему возврату из функции
Применение извлечения
function result = calculate(bottom, top)
if top > bottom
sum = 0;
for number = bottom:top
sum = sum + filterNumber(number);
end
result = sum;
else
result = 0;
end
end
function result = filterNumber(number)
if mod(number, 2) == 0
result = number;
else
result = 0;
end
end
Применение инверсии
Смысл применения инверсии. Когда мы вкладываем благоприятный исход глубже по пути условных конструкций, создается избыточная вложенность. Следует сначала сделать проверку относящуюся к неблагоприятному исходу.
function result = calculate(bottom, top)
if top < bottom
result = 0;
return;
end
sum = 0;
for number = bottom:top
sum = sum + filterNumber(number);
end
result = sum;
end
Избегать вложенности стоит потому, что она усложняет понимание кода. Когда все неблагоприятные условия вынесены в начало функции, а основной поток выполнения идет дальше, это упрощает чтение и позволяет сосредоточиться на ключевой логике. Вложенность заставляет держать в голове слишком много условий, что ухудшает читаемость и усложняет поддержку кода.