October 30

Простое определение говнокода

Все программисты считают говнокод отвратительным явлением, с которым нужно бороться, но единогласного определения этого понятия не существует. Немного поворчу на эту тему...

Есть мнение, что говнокод появляется вследствие экстремального программирования, когда надо сделать быстро, не особо заботясь о декомпозиции, лаконичности и красоте. Но зачем вам эта красота? Любуйтесь людьми противоположного пола, хоть вживую, хоть в интернете. А код в первую очередь должен быть понятным.

Если глядя на какой-либо фрагмент чужого авторства или даже своего, вы тратите больше секунды, чтобы понять что собственно происходит, перед вами говнокод!

Давайте сравним две реализации надуманной, но показательной задачи...

Вариант № 1:

Список.Добавить("Январь");
Список.Добавить("Февраль");
Список.Добавить("Март");
Список.Добавить("Апрель");
Список.Добавить("Май");
Список.Добавить("Июнь");
Список.Добавить("Июль");
Список.Добавить("Август");
Список.Добавить("Сентябрь");
Список.Добавить("Октябрь");
Список.Добавить("Ноябрь");
Список.Добавить("Декабрь");

Вариант № 2:

Для М = 1 По 12 Цикл
    Список.Добавить(Формат(Дата(2, М, 1), "ДФ='ММММ'"));
КонецЦикла;

Ну и что вам (нам) нравится больше? "Фу-у-у !!!" - скажет бывалый разработчик, почему-то назначивший себя сеньором (помидором). Типа первый вариант сделал неумеха, торопыга или просто лентяй. Но давайте задумаемся, сколько времени уходит у разных, в том числе начинающих программистов, чтобы понять в чем дело... В первом случае, доля секунды и все очевидно. Во втором тоже более-менее, но некоторые задумаются, почему там двойка. Кто-то догадается сразу, кто-то потратит драгоценное время, проверяя, а не ошибка ли это. В конце концов становится понятно, что если нужны только месяцы, год в датах может быть любым. Две тысячи какой-нибудь не лучше две тысячи другого, поэтому для красоты пусть будет первым от Рождества Христова. Но тут сюрприз. Первое января первого года - это пустая дата и поэтому Формат() вернет нам вместо января - кукиш. А если использовать второй год - становится все ок.

По времени разработки второй вариант, очевидно делать дольше, скорость работы обоих решений одинаковая. Размер текста? В современном мире терабайтов, вы серьезно? Так что же выходит? Нафига козе баян!!! Зачем все эти дешевые понты!!! Машина поймет любое закодированное сообщение, если будет знать правила этого кодирования. А программный код - это в первую очередь текст и он, как любой текст, должен быть понятным человеку. Так что, друзья мои, говнокод представлен в варианте номер два.

Пара выводов из моего спорного спича:

  1. Любые штучки-дрючки-закорючки, когда для сокращения записи вместо слов используются знаки - лютый говнокод.
  2. Хороший код всегда проще говнокода, но при этом чаще всего объемнее.

P.S. Сам я скорее напишу как во втором варианте, но немного улучшу, чтобы снять возникающие вопросы:

ЛюбойГод = 2000;
Для НомерМесяца = 1 По 12 Цикл
    СписокМесяцев.Добавить(Формат(Дата(ЛюбойГод, НомерМесяца, 1), "ДФ=ММММ"));
КонецЦикла;

←31 | заметка 32 | 33→