Приветствую всех !
Постоянно вижу код, в котором фигурные скобки расставляются в таком стиле:
if (a == b) {
... }
Но это же чертовски неудобно, да еще когда повсюду разные "какашки", извините,
вроде doxygen-овских комментариев. По-моему, такое форматирование затрудняет восприятие кода.
Да что там "затрудняет" — вообще делает этот процесс кошмарным !
Почему-то встречаю такой код постоянно, в разработках самого разного уровня и объема.
Приведу реальный пример.
case EXTRA:
if (state->flags & 0x0400) {
copy = state->length;
if (copy > have) copy = have;
if (copy) {
if (state->head != Z_NULL &&
state->head->extra != Z_NULL) {
len = state->head->extra_len - state->length;
zmemcpy(state->head->extra + len, next,
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
}
if (state->flags & 0x0200)
state->check = crc32(state->check, next, copy);
have -= copy;
next += copy;
state->length -= copy;
}
if (state->length) goto inf_leave;
}
state->length = 0;
state->mode = NAME;
Ужасно ! Тут же черт ногу сломит ! При виде закрывающей фигурной скобки хочется сразу отыскать ее
"старшую сестру", чтобы мысленно обозначить выделенный ими кусок кода, а для этого приходится бегать
глазами и выискивать конструкции типа if и while. А была бы она на том же горизонтальном уровне —
все было бы гораздо проще. Если кому-то показалось, что я утрирую — что ж, может быть.
А вам когда-нибудь приходилось по долгу службы разбираться в такой вот каше ?
Лично у меня уже после 20-30К строк от постоянных метаний уже реально болят глаза.
Этот код при просмотре хочется выкинуть и переписать заново, на большом белом листе, с "кислородом",
где логические и вложенные блоки были бы явно обозначены. Хотя бы так:
case EXTRA:
if (state->flags & 0x0400)
{
copy = state->length;
if (copy > have)
{
copy = have;
}
if (copy)
{
if (state->head != Z_NULL && state->head->extra != Z_NULL)
{
len = state->head->extra_len - state->length;
zmemcpy(state->head->extra + len, next,
len + copy > state->head->extra_max ?
state->head->extra_max - len : copy);
}
if (state->flags & 0x0200)
{
state->check = crc32(state->check, next, copy);
}
have -= copy;
next += copy;
state->length -= copy;
}
if (state->length) goto inf_leave;
}
state->length = 0;
state->mode = NAME;
Ну неужели я не прав, и первый вариант читается лучше ?
Или это какой-то всеобщий заговор, или code convention, которому следуют, не задумываясь ?