Дублирование кода — термин из программирования, под которым понимается, что некоторые участки исходного кода могут встречаться более чем однажды, как внутри одной, так и в нескольких программных сущностях. Дублирование является симптомом так называемого «дурно пахнущего кода».
Знаю эту штуку, это когда вместо того чтобы писать
if (SomeRepetableConditionNeedsSpecialActions)
{
SpecialConditionAction();
}
пишут
if (SomeRepetableConditionNeedsSpecialActions)
{
Action1();
Action2();
Action3();
}
И повторяют тот же самый код, когда условие срабатывают где то еще.
Если баг засел в Action2() (например) то в первом случае он автоматический исправится во всех этих местах, а во втором нужно ходить и править во всех местах, если еще конечно о них вспомнишь.
Короче ошибка при конструировании программы.
Но дублированием так же иногда называют обычным копипастом кода.
if (SomeRepetableConditionNeedsSpecialActions)
{
SpecialConditionAction();
}
пишут
if (SomeRepetableConditionNeedsSpecialActions)
{
Action1();
Action2();
Action3();
}
И повторяют тот же самый код, когда условие срабатывают где то еще.
Если баг засел в Action2() (например) то в первом случае он автоматический исправится во всех этих местах, а во втором нужно ходить и править во всех местах, если еще конечно о них вспомнишь.
Короче ошибка при конструировании программы.
Но дублированием так же иногда называют обычным копипастом кода.
а если в половине случаев нужно поставить костыль на велосипедной тяге, то копирование кода допускается?
В 70% случаев костыли можно обойти.
Но копировать код вообще никогда не надо, есть же инлайновые функции, их придумали специально для решения этой проблемы.
Но копировать код вообще никогда не надо, есть же инлайновые функции, их придумали специально для решения этой проблемы.
Которые дают утечку на старом Mono. Привет от Unity.
Инлайн для большинства компиляторов и платформ - всего лишь рекомендация, подсказка компилятору, а не жёсткое указание.
Компиляторы нынче больно умными себя считают...
Есть, конечно, модификаторы для некоторых очень частных случаев - форсинлайн тот же.
Собственно, я к чему.
Иногда дублирование кода - нужно. Когда ты понимаешь, как и что делаешь, и точно знаешь, что нужно именно так, а не иначе. Я на asm использовал дублирование не так уж редко (макросами), ибо там уж, извините я точно знаю, когда мне и что нужно до каждой команды.
Компиляторы нынче больно умными себя считают...
Есть, конечно, модификаторы для некоторых очень частных случаев - форсинлайн тот же.
Собственно, я к чему.
Иногда дублирование кода - нужно. Когда ты понимаешь, как и что делаешь, и точно знаешь, что нужно именно так, а не иначе. Я на asm использовал дублирование не так уж редко (макросами), ибо там уж, извините я точно знаю, когда мне и что нужно до каждой команды.
Язык ассемблера - отдельный случай, как и низкоуровневое программирование вцелом. Ты ограничен памятью, мощностью. Оптимизируешь по самые яйца, где это нужно.
Сейчас же, в большей части как прикладного так и веб программирования важной составляющей является читаемый, легко поддерживаемый код.
Любопытства ради, приведи пример, где надо дублировать код при написании под окна, скажем.
Сейчас же, в большей части как прикладного так и веб программирования важной составляющей является читаемый, легко поддерживаемый код.
Любопытства ради, приведи пример, где надо дублировать код при написании под окна, скажем.
больной ублюдок, открывающую скобку на новой строке!
Зависит от конкретных CodeStyle в конкретных проектах или компаниях.
Все "правила хорошего кода" написаны кровью, вытекшей из глаз программистов, читавших чужой код
Не бывает ничего абсолютного. Та же открывающая скобка — довод за первый вариант — экономится строчка (а по вертикали их и так ограниченное число, и зрение устроено так, что человеку легче видеть панораму, чем бегать взглядом вверх-вниз). Зато во втором варианте очень легко видеть вложенности, видеть одним взглядом, где какая скобка открывалась и эта же скобка закрывалась. Без необходимости подводить курсор и искать, какую скобку подсветит в ответ.
Кроме того, в любой нормальной IDE есть функции форматирования кода, которые одним вызовом из меню (или по хоткею) преобразуют к тому виду, в котором ты хочешь это читать. Так что спор про CodeStyle — один из самых бессмысленных в программировании.
Кроме того, в любой нормальной IDE есть функции форматирования кода, которые одним вызовом из меню (или по хоткею) преобразуют к тому виду, в котором ты хочешь это читать. Так что спор про CodeStyle — один из самых бессмысленных в программировании.
..."дурно пахнущего кода"? Чувак, ты наверное негров афроамериканцами называешь? :)
Говнокод он и есть говнокод. Не стоит тратить на него красноречие.
Говнокод он и есть говнокод. Не стоит тратить на него красноречие.
Это просто копипаста из вики :)
Какая разница, если в случае исправления, расширения или чего-то еще придется менять код во всех местах куда вы его нашпиговали.
при использовании общего метода следующие плюсьі:
# при изменении только внутреней логики, меняем только метод
# при изменении требуемьіх параметров от вьізівающей стороньі, хоть нам и придется править тауже каждое место вьізова, зато гарантировано не забудем поправить везде т.к. в большинстве случаев приложение даже не сбилдится.
# при изменении только внутреней логики, меняем только метод
# при изменении требуемьіх параметров от вьізівающей стороньі, хоть нам и придется править тауже каждое место вьізова, зато гарантировано не забудем поправить везде т.к. в большинстве случаев приложение даже не сбилдится.
Это как с воровством, за 1 баян вешают, а за 100 - дарят звезды.
Чтобы написать коммент, необходимо залогиниться