Apr 03, 2012 21:50
Имеем пять строчек кода C++, дублированных два раза.
Имеет смысл их выносить в общую функцию для упрощения исходников? Конечно нет.
1) заголовок декларации метода в классе - +1 строка
2) заголовок реализации метода +1 строка
3) закрывающая фигурная скобка ( у кого-то ещё и открывающая на отдельной строке ) +1 строка
4) вызов функции +2 строки
5) тело функции +5 строк.
6) удаление копипасты -10 строк.
7) при чтении кода - дополнительный умственный прыжок из места вызова функции в место определения. +сколько-то к метрикам запутанности кода.
Итого выигрыша нет.
Это ещё хорошо, когда тело функции и исходная копипаста совпадает. А бывает так, что приходится изворачиваться, что бы вернуть два значения по ссылке, так как исходный код менял две переменные, и передать пачку контекста.
Проблема неуклюжих языков не только в том что них надо написать N букв что бы сделать какую-то фигню (типа найти максимум). Но и в том, что если N не слишком большое и повторяется - то его даже нельзя вынести в функцию, уйдёт больше символов на танцы с вызовом и определением этой функции.
Хотели упростить - а получилось усложнить.
У программистов на более ловких языках - есть выбор.
Можно оставить копипасту как есть, так как те 5 строк C++ - это одна строка их языка. А можно и в функцию поместить, благо что синтаксического оверхеда на определение функции гораздо меньше. И вернуть две переменные из функции - без проблем (туплы+примитивный pattern-matching). И контекст без проблем в локальную функцию передаётся (лямбд увы пока нет в С++ - production).
c++