(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

10 лучших советов по написанию читабельного кода

Источник: msug

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

Комментирование и документирование 

Очень полезной фичей в Visual Studio является возможность комментариев в пользовательских классах и методах, в С# приложениях просто надо добавит три слеша ("///") перед их объявлением.VS.NET автоматически создает необходимые XML атрибуты, куда можно вставлять описание и информацию о параметрах. После того как проект скомпилирован, VS.NET сохраняет введенную информацию, и она будет отображаться с использованием IntelliSense. Эта  информация включает комментарии для методов, параметры методов, возвращаемые переменные методов, перечислений и свойств.

Избегайте очевидных комментариев

Комментарии должны описывать цель секции кода, но не механизм как достичь эту цель - описывайте скорее "почему", а не "как". Если вы заметили, что комментариях  используете имена переменных, лучше остановится и переписать комментарий. 

Не правильно:

        // получить код
        countryCode = GetCountryCode(ServerType.BackUp);

        // если код US         
        if (countryCode == "US")

            // показать пользователя  
            InvokeUSUser(); 

Правильно:

        // отобразить пользователей с US 
        countryCode = GetCountryCode(ServerType.BackUp);
        if (countryCode == "US")
           InvokeUSUser();

Единый стиль в отступах 

Все знают что надо делат отступы в коде, чтобы повысить его читабельность о структурированность. Есть несколько стилей:

Стиль №1

        void DoSomething() { 

            if (maybe) { 
                DoItNow();
                Again(); 
            } else {
                AbortMission();
            }
        }

Стиль №2

        void DoSomething()
        { 

            if (maybe) 
            { 
                DoItNow();
                Again(); 
            }
            else 
            {
                AbortMission();
            }
        }

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

Еще по структуре отступов: 

  1. Разбивайте длинные SQL запросы на  несколько строчек используя verbatim strings, т.е. использовать "@" в начале строки. Выравнивать  последующие строчки лучше по началу  SQL выражения в первой строчке . Тоже правило работает для вызова функций с большим количеством параметров

    strSQL = @"SELECT tblAssemblyDetail.*, tblInventory.Description, 
               tblInventory.Serials FROM tblInventory RIGHT JOIN 
               tblAssemblyDetail ON tblInventory.ItemID = 
               tblAssemblyDetail.ItemID
               WHERE ((tblAssemblyDetail.Assembly)='Package A')
               ORDER BY tblAssemblyDetail.LineNumber;" ;
    
  2. Разбивайте длинные объявления методов на несколько строчек и отступайте на 6 символов или 2 TAB отступа. Тоже правило работает для длинных IF выражений.

          public void CreateNewNote( long accountNumber,
                              string noteDate, string startTime,      
                              string note, long repNumber){}  
    
  3. Когда присваиваете переменной длинное выражение, лучше сделать перенос сразу после знака "=", чтобы было видно все выражение в одной строчке.

          grdDetail.Columns("CanBuild").Text = 
                    (long)lngQuantityLocation / (long)grdDetail.Columns("Needed").Text; 
    

Группируйте код  

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

            // initialization 
            SqlDataAdapter adapter; 
            SqlConnection connection;
            SqlCommand command;

            // getTicketID 
            string sqlCommand = " SELECT * FROM Cases " 
            command = new SqlCommand(); 

Добавление строки комментариев перед каждым блоком также визуально подчеркивает разделение . 

Избегайте глубоких вложений

Слишком много уровней вложенности усложняют читабельность кода и его тяжелее отследить. Часто можно внести некоторые изменения в код для большей читабельности.

Не правильно:

         public int DoSmth(){ 
            if (IsWritable(folder)) {  
                if (fp == FileOpen(filePath,"w")) {  
                    if (stuff = getSomeStuff()) {  
                       if (FileWrite(filePath,stuff)){  
                                // ..                         
                       } else {  
                           return false;  
                       }  
                   } else {  
                       return false;  
                  }  
               } else {  
                   return false;  
               }  
           } else {  
               return false;  
           }  
         }

Правильно:

         public int DoSmth(){
            if (!IsWritable(folder))
            {
                return false;
            }
            if (fp != FileOpen(filePath, "w"))
            {
                return false;
            }
            if (stuff != getSomeStuff())
            {
                return false;
            }
            if (!FileWrite(filePath, stuff))
            {
                //..
            }
            else
                return false;
        }   

Организация файлов и папок

Технически можно весь код содержать в одном файле, но его будет очень тяжело читать и поддерживать. Лучше всего разделять решение(Solution) на разные проекты (projects) в соответствии с разными уровнями, модулями, или компонентами определенными на стадии дизайна. 

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

В Visual Studio 2005 ввели полезную фичу: возможность добавлять папки в одно решение, группировать проекты и даже папки в вашей собственной логической иерархи. 

Для примера пользуясь руководством Microsoft Patterns and Practicies по разработке трехуровневой архитектуры приложения, у вас может получиться что-то типа:

Будьте последовательны в именовании переменных 

Как правило имена переменных имеют смысловую нагрузку и состоят из нескольких слов. Но это не обязательно так для локальных переменных. Они могут состоят и из одного символа.  Хорошей практикой является  использование единого принципа в именовании локальных переменных во всем проекте.  Например: 

           // i для переменной счетчика циклов 
           for (int i = 0; i < 10; i++)

           // j для вложеных циклов 
           for (int j = 0; j < 10; j++)

           // ret для возвращаюшей результат переменной 
           public int Foo() 
           {
               ret["bar"] = GetBarCode();
               ret["stuff"] = GetStuff();
               return ret;
           }

           // fp для указателя файла (file pointer)  
           fp = FOpen("file.txt","w");  

Тут также стоит вспомнить про Венгерскую нотацию. Суть Венгерской нотации сводится к тому, что имена идентификаторов предваряются заранее оговорёнными префиксами, состоящими из одного или нескольких символов. Пример:

Class

cls

clsEmployee

Form

frm

frmLogin

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

Пишите SQL спец. слова заглавными буквами 

Обращение к базам данных важная часть большинства WEB приложений. Если вы часто используете запросы, хорошая идея сделать их также более читабельными. Общепринятой практикой считается писать заглавными словами спец. слова SQL: 

           string statement = @"SELECT DISTINCT titel as linieName
                                FROM qry_Forecast_Taktzeiten
                                WHERE linieName LIKE 'lin%'; "; 

DRY принцип

DRY расшифровывается как Don"t Repeat Yourself (Не повторяйтесь). Также известно выражение DIE: Duplication is Evil(Повторение - зло). Принцип гласит:

" Каждый сегмент знаний должен иметь единственное и однозначное  представление в рамках системы".

В ASP.NET можно использовать эталонные страницы( master pages) для задания шаблона всего сайта.   

Если вам все таки надо использовать кусок кода снова и снова, то его можно перенести на панель инструментов(ToolBox), просто  выделите ваш код и перетащите выбранный текст на общую вкладку. Теперь шаблон можно использовать как любой другой контрол. 

Рефакторинг

Рефакторинг - процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы. В основе рефакторинга лежит последовательность небольших эквивалентных (то есть сохраняющих поведение) преобразований.  Лучше проводить рефакторинг недавно написанного кода, пока он свежий в голове, что бы потом легче было его читать и использовать. Хорошая книга по рефакторингу тут.

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 15.03.2010 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Microsoft 365 Apps for business (corporate)
Microsoft Windows Professional 10, Электронный ключ
Microsoft 365 Business Basic (corporate)
Microsoft 365 Business Standard (corporate)
Microsoft Office 365 Профессиональный Плюс. Подписка на 1 рабочее место на 1 год
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Безопасность компьютерных сетей и защита информации
Новости ITShop.ru - ПО, книги, документация, курсы обучения
Программирование на Microsoft Access
CASE-технологии
Компьютерные книги. Рецензии и отзывы
eManual - электронные книги и техническая документация
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100