Простое определение говнокода
Все программисты считают говнокод отвратительным явлением, с которым нужно бороться, но единогласного определения этого понятия не существует. Немного поворчу на эту тему...
Есть мнение, что говнокод появляется вследствие экстремального программирования, когда надо сделать быстро, не особо заботясь о декомпозиции, лаконичности и красоте. Но зачем вам эта красота? Любуйтесь людьми противоположного пола, хоть вживую, хоть в интернете. А код в первую очередь должен быть понятным.
Если глядя на какой-либо фрагмент чужого авторства или даже своего, вы тратите больше секунды, чтобы понять что собственно происходит, перед вами говнокод!
Давайте сравним две реализации надуманной, но показательной задачи...
Список.Добавить("Январь"); Список.Добавить("Февраль"); Список.Добавить("Март"); Список.Добавить("Апрель"); Список.Добавить("Май"); Список.Добавить("Июнь"); Список.Добавить("Июль"); Список.Добавить("Август"); Список.Добавить("Сентябрь"); Список.Добавить("Октябрь"); Список.Добавить("Ноябрь"); Список.Добавить("Декабрь");
Для М = 1 По 12 Цикл Список.Добавить(Формат(Дата(2, М, 1), "ДФ='ММММ'")); КонецЦикла;
Ну и что вам (нам) нравится больше? "Фу-у-у !!!" - скажет бывалый разработчик, почему-то назначивший себя сеньором (помидором). Типа первый вариант сделал неумеха, торопыга или просто лентяй. Но давайте задумаемся, сколько времени уходит у разных, в том числе начинающих программистов, чтобы понять в чем дело... В первом случае, доля секунды и все очевидно. Во втором тоже более-менее, но некоторые задумаются, почему там двойка. Кто-то догадается сразу, кто-то потратит драгоценное время, проверяя, а не ошибка ли это. В конце концов становится понятно, что если нужны только месяцы, год в датах может быть любым. Две тысячи какой-нибудь не лучше две тысячи другого, поэтому для красоты пусть будет первым от Рождества Христова. Но тут сюрприз. Первое января первого года - это пустая дата и поэтому Формат() вернет нам вместо января - кукиш. А если использовать второй год - становится все ок.
По времени разработки второй вариант, очевидно делать дольше, скорость работы обоих решений одинаковая. Размер текста? В современном мире терабайтов, вы серьезно? Так что же выходит? Нафига козе баян!!! Зачем все эти дешевые понты!!! Машина поймет любое закодированное сообщение, если будет знать правила этого кодирования. А программный код - это в первую очередь текст и он, как любой текст, должен быть понятным человеку. Так что, друзья мои, говнокод представлен в варианте номер два.
Пара выводов из моего спорного спича:
- Любые штучки-дрючки-закорючки, когда для сокращения записи вместо слов используются знаки - лютый говнокод.
- Хороший код всегда проще говнокода, но при этом чаще всего объемнее.
P.S. Сам я скорее напишу как во втором варианте, но немного улучшу, чтобы снять возникающие вопросы:
ЛюбойГод = 2000; Для НомерМесяца = 1 По 12 Цикл СписокМесяцев.Добавить(Формат(Дата(ЛюбойГод, НомерМесяца, 1), "ДФ=ММММ")); КонецЦикла;