Всеобщий заговор в отношении скобок...
От: okman Беларусь https://searchinform.ru/
Дата: 27.11.10 13:57
Оценка: 15 (8) +24 -15 :))) :))) :))) :))
Приветствую всех !

Постоянно вижу код, в котором фигурные скобки расставляются в таком стиле:

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, которому следуют, не задумываясь ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.