Image courtesy of Idea go / FreeDigitalPhotos.net
С++ это язык, который позволяет делать очень многое. Возможно, даже больше чем нужно для разработки программ. В нем есть ряд возможностей, которые на первый взгляд кажутся весьма удобными, но при активном использовании код превращается в макароны
Шаблоны (templates)
Без минимального использования шаблонов в C++ не обойтись. Но стоит увлечься их использованием, компиляция программы замедлиться в разы, а найти кто именно, что именно и у кого позвал, становится практически невозможно. Особо стоит упомянуть бинды (boost::bind, tr1::bind и т.п.), при использовании которых вызов в функции превращается в нечитабельную и неотлаживаемую портянку:std::tr1::bind(
&SomeThing::Process,
std::tr1::cref(specificThing),
std::tr1::placeholders::_1,
std::tr1::cref(cancelState),
std::tr1::ref(accumulatingProgress))
А уж какие невнятные ошибки выводят компиляторы, когда не находит подходящей функции для бинда (например, когда список аргументов слегка изменился) не компенсирует даже многоэкранный размер этих ошибок.
Лямбда-выражения
Какой соблазн, описать какое-то действие, не думая над его названием и сразу исполнить. Осторожно! Это сыграет злую шутку с теми, кому придется поддерживать код. Ведь названия сущностей и действий - это и есть то, что помогает понять, что именно делает программа.Макросы
В отличии от предыдущих двух, макрос - самый старый "друг" программиста, пришедший еще со времен чистого С. Но их использование чревато засорением глобального пространства имен, неудобством отладки и решения проблем компиляции. И самое неприятное, что макросы ведут себя совсем иначе, чем функции со своими аргументами, и в результате разворачивания макроса могут выполняться совсем не те операции, что были задуманы.Почему их лучше не использовать? Они сложно читаются и модифицируются.
Почему люди все же используют их? Использование этих технологий позволяет разработчикам чувствовать себя крутым. Кроме того, эти технологии ускоряют изначальное написание кода.
Совершенно верно. Часто встречается еще ситуация, когда программист специально пишет непонятный код, чтобы его не уволили - ведь не разберется никто!
ОтветитьУдалитьНа самом деле, тут наоборот - если ты пишешь понятный другим код, то увольнять тебя - самое последнее, что можно сделать.
Также неплохо бы проверять на адекватность в этом смысле людей, приходящих на собеседования. Это всяко полезней, чем спрашивать хрень типа Назовите 6 параметр в функции CreateProcess.