Ненормальное программирование / В чём смысл?

в 9:58, , рубрики: Новости, метки:

Ненормальное программирование / В чём смысл?

SomeFunction()
{
...
if (false)
{
...
}
...
}

Зачем может быть нужен блок if (false)?
Предположим, что:Это не ошибка и не забывчивость.

if и false — это именно оператор условия и логическая ложь, а не какие-то хитрости с макросамистроками и т.д.

Пару вариантов ответа под катом. Желающие высказать свои идеи приглашаются мимо отгадки сразу в комментарии.
Два неадекватных варианта

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

Где-то в этой функции есть goto внуть блока if (false)
Я вообще не являюсь идейным противником goto — иногда его использование оправдано. Но переход внуть недостижимого условия — тут или совсем каша в коде, или какой-то такой глубокий сакральный смысл, что мне его понять не дано. Проехали.

Два адекватных варианта

1. Использования блока if (false) для временного комментирования кода.
Да, конечно же, у нас есть \, /**/ (ну или что там в Вашем языке обозначает комментарий). Но с этими вещами имеются следующие беды:
\ нужно ставить на каждой строке (да, некоторые IDE имеют для этого хоткеи — но не все, да и помнить эти хоткеи нужно).

/**/ не могут быть вложенными. При необходимости закомментить код, в котором уже есть такие комментарии сразу добавляются лишние действия, между которыми еще и нужно выбирать (закомментить все, изменить тип комментариев, удалить внутренний блок комментов)!

Закомментированный код легко может быть удален другим программистом по логике «закомментировано — значит не нужно». А ведь может быть нужно, а закомментировано было временно. К блоку незакомментированого кода будет, скорее всего, проявлено больше уважения.

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

Закомментированный код непонятно-как поддерживается средствами рефакторинга. Какие-то его меняют, какие-то спрашивают что с ним делать, а какие-то просто игнорируют.

При комментировании блоком if (false) мы в избавлены от части этих трудностей.
2. Выполнение иногда нужных операций в режиме отладки
В процессе пошаговой отладки (например в Visual Studio) мы можем перемещать текущую точку выполнения программы, в том числе мы можем переместить её внутрь никогда не выполняющегося блока if.
Зачем это может понадобиться? Ну вот пару вариантов:В этот блок можно вынести какое-нибудь экстра-тяжелое логирования (ну, например, дамп всей памяти). В обычном режиме (и даже в дебаг-конфигурации) нам это не нужно, но вот иногда, по ходу отладки какого-то тяжелого места может понадобиться. Обворачиваем этот дамп в if (false) и в нужный момент прыгаем внутрь него, потом — обратно.

По ходу той же отладки нам нужно для теста перевести объект в некоторое эталонное состояние. При чём нам это не нужно ни в релизе, ни в дебаге — только вот в данный момент для отладки. Плюс, возможно, в будущем — если возникнут проблемы. Заворачиваем инициализацию объекта в if (false) — это гарантирует нам наличия кода в программе и в нужный момент перебрасываем выполнение внутрь.

Таким образом, мы получаем код, который никогда не будет вызван самой программой, но на который мы всегда при желании сможем «прыгнуть» по ходу отладки.


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js