Подробнее
Если поймаю тебя еще раз - будешь висеть с петлей на шее ТГр *" г • 1 тгш 1 \ 1 л 1«а • ■ 1 |'*«?) • -Ж 1 II 1 с~ -Л—1 1 1 1 п 1/ * У А/ I /—* -i 1 II IlLU-iJ * fjfM. 11..**-*’ - И® 1 л ComxnitStrip.com
commitstrip,Смешные комиксы,веб-комиксы с юмором и их переводы,программисты
Еще на тему
if (SomeRepetableConditionNeedsSpecialActions)
{
SpecialConditionAction();
}
пишут
if (SomeRepetableConditionNeedsSpecialActions)
{
Action1();
Action2();
Action3();
}
И повторяют тот же самый код, когда условие срабатывают где то еще.
Если баг засел в Action2() (например) то в первом случае он автоматический исправится во всех этих местах, а во втором нужно ходить и править во всех местах, если еще конечно о них вспомнишь.
Короче ошибка при конструировании программы.
Но дублированием так же иногда называют обычным копипастом кода.
Но копировать код вообще никогда не надо, есть же инлайновые функции, их придумали специально для решения этой проблемы.
Компиляторы нынче больно умными себя считают...
Есть, конечно, модификаторы для некоторых очень частных случаев - форсинлайн тот же.
Собственно, я к чему.
Иногда дублирование кода - нужно. Когда ты понимаешь, как и что делаешь, и точно знаешь, что нужно именно так, а не иначе. Я на asm использовал дублирование не так уж редко (макросами), ибо там уж, извините я точно знаю, когда мне и что нужно до каждой команды.
Сейчас же, в большей части как прикладного так и веб программирования важной составляющей является читаемый, легко поддерживаемый код.
Любопытства ради, приведи пример, где надо дублировать код при написании под окна, скажем.
Дело в том, что инлайн при определённых условиях окружения будет медленнее вызова. И компилятор себе на уме.
Например... когда будет идти обращение к странице памяти вне подгруженной. Компилятор думает, зачем вам раздувать код? По компиляции вы вываливаетесь за текущую страницу. Давай я этому дурню за клавой сделаю без инлайн, он потом мне спасибо скажет. И он игнорирует ваш инлайн. Для однопоточного выполнения он вроде как прав. Но откуда компилятору на этапе компиляции знать, сколько у меня будет ОЗУ, на какой архитектуре запущено (компилируется ведь под семейство) как оно будет сегментировано по страницам, что уже загружено, а что нет, и прочая? Те же общие STL контейнеры в таких случаях начинают тормозить, блокировать взаимно, не давая развернуться по-полной. Мне приходилось специально делать asm-вставки в высокоуровневый код, чтобы вправить мозги, и добиться явного отсутствия синхронизации между потоками.
Но это всё конечно исключения.
В 99,9% случаев конечно в высокоуровневом программировании об этом думать не надо.
И писать именно понятный и компактный код.
Кроме того, в любой нормальной IDE есть функции форматирования кода, которые одним вызовом из меню (или по хоткею) преобразуют к тому виду, в котором ты хочешь это читать. Так что спор про CodeStyle — один из самых бессмысленных в программировании.
Говнокод он и есть говнокод. Не стоит тратить на него красноречие.
# при изменении только внутреней логики, меняем только метод
# при изменении требуемьіх параметров от вьізівающей стороньі, хоть нам и придется править тауже каждое место вьізова, зато гарантировано не забудем поправить везде т.к. в большинстве случаев приложение даже не сбилдится.