Я люблю садоводство. Я помню, как хорошо было, когда я заложил свою первую грядку. Хотя мне пришлось ждать целый год, пока зацветут цветы, это все равно было очень полезным.

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

Это в конечном итоге привело к тому, что в более поздние сезоны почти не осталось цветов. Мне нужен был совет.

Моя бабушка, наделенная десятью зелеными пальцами, была вызвана на консультацию.

Ее совет в тот день полностью изменил мою точку зрения на то, как подойти к моему саду.

«Лучшее вложение, которое вы можете сделать в своем саду, - это обрезать то, что вам не нужно». - Бабушка Фиа Вентер.

Это заставило меня задуматься. Конечно, я видел в Интернете фотографии садов до и после и всегда думал, что главное - переделать. Но с ее словами в голове я понял, что вы можете устранить беспорядок, удалив наросты и реструктурируя то, что у вас есть.

Я начал искать изображения в Интернете и нашел этот сад.

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

Результаты были поразительными.

Мои же цветы и растения внезапно обрели новую жизнь.

Что случилось?

  • Обрезка побудила мои растения к кустарнику, что привело к появлению большего количества цветов.
  • Ухаживать за моим садом стало проще - например, легче обнаружить мертвые листья.
  • Улучшил общую эстетику моего сада.
  • Формирование моих растений улучшилось.
  • Планировка и видение моего сада теперь ясны и понятны.

Это заставило меня задуматься.

Как сокращение связано с разработкой программного обеспечения?

Я понял, что для разработки программного обеспечения верно следующее:

  • Мы забываем «обрезать» наш код.
  • Мы позволяем нашему коду свободно разветвляться.
  • Нам нужно удалить ненужное ветвление.
  • Со временем техническое обслуживание становится все более и более сложным.
  • Верстка и дизайн становятся неясными.

Но почему это происходит?

Куда делся GoTo?

GoTo - это инструкция, которая позволяет одностороннюю передачу управления другой строке кода. В отличие от функционального вызова, который вернет управление. Места перехода обычно представляют собой метку или номер строки.

Это можно считать ветвлением. Реализуя оператор GoTo, вы создали новый путь выполнения для своего кода.

Почему это плохо?

Использование GoTo может привести к созданию программ, которые чрезвычайно сложно понять и проанализировать. Это может привести к неопределенному поведению и повысить жесткость вашего кода.

Многие программисты сегодня будут утверждать, что сегодня мы не используем операторы GoTo, поскольку многие языки программирования больше не поддерживают их, так зачем вообще об этом говорить?

Рассмотрим следующий фрагмент кода. Попробуйте найти выражение GoTo:

private boolean processTransaction(Transaction trans) {
// do some session security checking
User user = trans.user;
log("security check for user " + user.name);
if ( user.loggedIn() == false)
return false;
if ( user.sessionTimeout() == true )
 return false;
boolean success = true;
// process transaction here
return success;
}

Условные операторы, IF и SWITCH следует рассматривать как операторы GoTo.

IF condition THEN goto
SWITCH expression CASE goto

Мы слишком часто используем условные операторы.

Почему ветвление плохо?

Ветвление требует больших затрат ЦП.

  • Когда процессор видит, что в его конвейере появляется инструкция ветвления, ему нужно выяснить, как продолжить заполнение своего конвейера.
  • Чтобы выяснить, какие инструкции идут после ветки в потоке программы, необходимо знать две вещи:
  • если ветку возьмут и
  • цель филиала.

Это называется предсказанием переходов, и это сложная задача. Если процессор угадывает правильно, программа продолжает работу на полной скорости. Если вместо этого процессор угадывает неправильно, он просто потратил некоторое время на вычисление не того.

Теперь он должен очистить свой конвейер и перезагрузить его инструкциями из правильного пути выполнения.

Итог: большой успех в производительности.

Ветвление может привести к появлению узора, направленного против стрелок.

Вложенные условные операторы очень сложно отлаживать и поддерживать.

Как мне сократить свой код?

В следующей части мы рассмотрим, как можно сократить код, удалив большинство условных операторов. Мы исследуем альтернативные способы написания функций, чтобы они были более чистыми, короче и без IF.

Изменить старые привычки сложно. Особенно, если вы начали их любить. Решение проблем с помощью условных выражений стало для нас второй натурой. Как сказал Дейкстра:

Заключенный влюбляется в свои цепи.

Мы переработаем некоторый код, удалив операторы IF- и SWITCH-, и рассмотрим, принесет ли сокращение нашего кода лучшие результаты.