Форматирование исходного кода

Языки программировния не требует от программиста придерживатся каких либо строгих правил форматирования кода, а требуется только соблюдение синтаксиса. Но тем не менее существуют негласные правила и даже несколько стандартов форматирования исходного кода. В чем же дело? Для чего же себе усложнять жизнь каким либо правилами, если все и так работает? Ответ совершенно прост, любой код намного чаще читают чем пишут! А не форматированный код это не удобно, является причиной того что допущенная ошибка не будет замечена, требует титанических усилий для поиска в нем нужного участка и разбора что там написано да и просто некрасиво! Исходя из изложенного, код требует форматирования для удобного и легкого последующего чтения, ну и конечно чтобы требовало минимум дополнительных усилий на процедуру форматирования.

Общие советы:

  • старайтесь не использовать сокращения слов и абривиатуры, кроме общепринятых, все время помните что, то что вы пишете придется читать либо Вам либо кому то другому. Уверен что через 3-6 месяцев вы врядли вспомните что wwc это wrong word counter (счетчик неправильных слов);
  • давайте переменным и функциям осмысленные, отвечающие реальным целям названия. (название функции MakeJob совершенно не о чем не говорит);
  • старайтесь не вносить в название избыточную информацию (в классе реализующем массив строк переменную содержащую количество элементов достаточно будет назвать ElementCount, а название StringArrayElementCount явно будет избыточным);
  • используйте простые и желательно короткие, общеизвестные слова для названий;

Использование стилей регистра букв

Паскаль

При использовании этого стиля все первые буквы слов входящих в название пишутся в верхнем регистре.

WrongWordCounter

Кэмел

При использовании этого стиля вверхнем регистре пишутся только первые буквы 2-го и последующих слов (подходит для тех кто не использует Венгерскую нотацию т.к. будет трудно читать суфиксы).

wrongWordCounter

GNU

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

wrong_word_counter


Оформление кода

  • для формирования отступов всегда используйте табуляцию, почти все редакторы кода для языка C содержат настройку по количеству вставляемых отступов вместо знака табуляции;
  • в остальных случаях кроме первого отступа, используйте пробел;
  • если строка по ширине не помещается на экране (это около 80 символов или меньше если редактор занимает не всю ширину экрана) продолжение строки переносите на следующую строку, т.е. код должен быть виден без использования горизантальной прокрутки;
  • отделяйте логические блоки кода одной или двумя пустыми строками (т.е. описали переменные вставьте пустую строку, инициализировали переменные вставьте еще одну пустую строку и т.д.);

Фигурные скобки

Существует и используется несколько стилей растановки фигурных скобок в исходном коде:

  • Рациональный стиль, предложенный Керниген (Kernighan) и Ричи (Ritchie), авторами языка C. При использовании этого стиля экономится вертикальное пространство, но относительно трудно находить открывающую скобку "{"

        if( i > 0 ){
            i++;
            ...
            return 1;
        }


  • Стиль Whitesmith.  Whitesmith являлся разработчиком компилятора C. Хорошо выделяет блок кода, но скобки сразу не найдеш.

       if( i > 0 )
            {
            i++;
            ...
            return 1;
            }


  • Стиль Олмена.  Эрик Олемен (Eric Allman) разрабатывал утилиты Unix и BSD одна из которых Sendmail (межсетевой почтовый роутер) в дальнейшем один из основателей фирмы Sybase, ладно разговор не про него. Так как Олмен использовал этот стиль, в коде который был довольно известен, стиль приобрел довольно широкое распространение. Также этот стиль часто называют "стиль BSD". На мой взгляд этот стиль самый удобный и читабельный.

        if( i > 0 )
        {
            i++;
            ...
            return 1;
        }


  • Стиль GNU. стандарт GNU предписывает придерживатся следующего вида похожего на смесь стиля Олмена и Whitesmith

    int func1(int i)
        {
            if( i > 0 )
            {
                i++;
                ...
                return 1;
            }
        }

Используйте блок из фигурных скобок для одной строки


    if( i > 0 )
    {
          j++;
    }
    else
    {
        j--;
    }

хотя в данном случае, все будет ясно и прекрасно работать и в оформлении без скобок

    if( i > 0 )  j++;
    else         j--;

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

Выделение выражений.

Приведу некотырые правила, выведенные мной исходя из личного опыта, которые на мой взгляд заслуживают внимания:

  • Не ставьте пробел после операторов if, for, while и т.д. Синтаксис стандартный и запутатся трудно, а время и место экономится;

        if( выражение )

        for( ... ; ... ; ... )

        while( выражение )


  • Отделяйте выражение пробелами, если у вас сложное составное выражение возьмите его части в круглые скобки

        if( i > 5 ) или if( (x - 25 > dx) && ( y - 40 > dy ) && (x > 0) && (y > 0 )

    выглядит намного лутше чем

        if(i>5) или if(x-25>dx && y-40>dy && x>0 && y>0)

    даже в такой простой строке при неправильном написании ум начинает бунтовать и намекать "а не пошел ты куда подальше... с такими выражениями"
  • Имеет смысл операторы, такие как =, >,<, !=,== и т.д. с двух сторон отделяйть пробелами

        i = 5; или j = l + 6 или (ErrorCount + WarningCount) > MaxMessage

    конечно можно писать и так

        i=5; или j=l+6 или ErrorCount+WarningCount>MaxMessage
  • Отделяйте передаваемые в функции параметры пробелами

        ShowWindow( SW_HIDE ); или GetWindowRect( &theApp.rWinPos );

    несколько хуже выглядит

        ShowWindow(SW_HIDE); или GetWindowRect(&theApp.rWinPos);

    и это заметно даже при одном параметре, что же говорить когда параметров больше и где начинают перемешиватся кони и люди :)

Надеемся приведенная информация будет вам полезна и послужит для кого то основой, для кого то материалом для небольших изменений стиля. 



Подборки статей, полезных сервисов и вакансий, анонсы бесплатных лекций и бонусы. Присоединяйтесь!

Даю свое согласие на обработку персональных данных


+