*** ВНИМАНИЕ: Блог переехал на другой адрес - demin.ws ***

суббота, 11 июня 2011 г.

Должен ли быть стандарт кодирования жестким?

Например, вот такой кусок кода:

void f (  int a , char *p  )
{
   int   whattodo ;

   whattodo = a < 1 ? 2 : 0;

   switch ( whattodo )
   {
   case 2:
             printf("THIS\n"); break;
   case 1:
             printf("THAT\n");
             break;
   }
   if ( a !=  * p  ) {
             a = 1111111 ;

   } else
             a = 2222222;


}

Удивительно, но во многих компаниях, где я работал, подобный код спокойно подошел бы по принятому стандарту кодирования. И такой код вполне реален, так как он обычно создается за долгое время разными людьми. В целом код читаем и даже более менее понятен.

Но:

  • абсолютная неаккуратность и непоследовательность использования пробелов и пустых строк
  • бессмысленное имя переменной "whattodo"
  • непоследовательность в стиле расположения "{" и "break"

Вывод - это не код, а помойка.

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

Какой текст приятнее и понятнее читать?

Так:

Компьютерная сеть Международного валютного фонда подверглась хакерской атаке. Официального объявления об этом пока не сделано, однако сотрудникам о вторжении сообщили еще в среду. Представитель МВФ отказался сообщить какую-либо информацию об инциденте, заверив журналистов, что организация работает в обычном режиме.

Или так:

кОМИьютерная сеть       Международного    валютного
    фонда  подверглась хакерской атаке   . Официального
объявления          об этом пока не сделано , однако сотрудникам о
   вторжении сообщили ЕЩе в СрЕдУ.
ПредстАвитель   МВФ отказался сООбщить  какую-  либо информацию об
инциденте , заверив  журналистов        , что организация работает в
обычном         реЖиме  .

На многих это производит эффект.

Даже в крупных компаниях, когда вроде есть и время и люди, которые занимаются поддержкой качества кодовый базы, бывает трудно справляться с этой задачей. Когда появляются аргументы типа "клиент хочет это сегодня", то мантра "ну так работает же!!!" перебивает все аргументы за тотальную аккуратность в коде. Увы.

Еще пару мыслей. Есть определенные приемы в форматировании кода, которые призваны облегчить copy-paste.

Например расположение запятых на следующей строке. Это позволяет менять порядок строк без необходимости думать о запятой в последней строке:

A::A() :
  a(1)
  , b(1)
  , c(1)
{
...
}

Лично я не против copy-paste, когда ради его удобства уродуют текст - это уже слишком. Я резко против таких приемов.

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

Ошибки, вызванные такими легко и слепо перетаскиваемыми блоками, выльются в гораздо большие временные затраты, чем пару лишних секунд на ручную адаптацию перенесенного блока, когда за эти пару секунд ты так или иначе будешь вынужден пробежать глазами по тексту, и, возможно, выловить логические несовместимости.

Комментариев нет:

Отправить комментарий