220 likes | 460 Views
Технологии программирования. Оформление кода программы 10 апреля 2008 г. 4 курс. Соглашения об оформлении кода. Отступы, скобки и разделители; Правильное использование переменных; Соглашение об именах; Число строк на метод; Цикломатическая сложность кода (число переходов управления);.
E N D
Технологии программирования Оформление кодапрограммы10 апреля 2008 г. 4 курс
Соглашения об оформлении кода • Отступы, скобки и разделители; • Правильное использование переменных; • Соглашение об именах; • Число строк на метод; • Цикломатическая сложность кода (число переходов управления);
Стиль кода. Отступы и скобки. K&R Style (The One True Brace Style, 1TBS или OTBS) if (hours < 24 && minutes < 60 && seconds < 60) { return true; } else { return false; }
Стиль кода. Отступы и скобки. Allman style(by Eric Allman) (BSD in Emacs) if (hours < 24 && minutes < 60 && seconds < 60) { return true; } else { return false; }
Стиль кода. Отступы и скобки. Whitesmiths style(стиль Уайтсмита) if (hours < 24 && minutes < 60 && seconds < 60) { return true; } else { return false; }
Стиль кода. Отступы и скобки. GNU style (GNU Coding Standards) if (hours < 24 && minutes < 60 && seconds < 60) { return true; } else { return false; }
Вертикальное выравнивание $search = array('a', 'b', 'c', 'd', 'e'); $replacement = array('foo', 'bar', 'baz', 'quux'); ------------------------------------------------------------------------------- $search=array('a', 'b', 'c', 'd', 'e'); $replacement = array('foo', 'bar', 'baz', 'quux');
Пробелы int i; for(i=0;i<10;++i){printf("%d",i*i+i);} ------------------------------------------------------------------------------- int i; for(i=0;i<10;++i){ printf("%d",i*i+i); }
Рекомендации для SQL selectcl.Name, cn.* fromtbl_clientscl left join tbl_contractscn oncl.Id = cn.ClientId wherecn.ContractDate = ‘20080401’ andcl.City = ‘MOSCOW’ --group by cl.Name order by 1, 2
Грамотное объявление переменных • Отключите неявное объявление переменных; • Объявляйте все переменные; • Используйте соглашения об именах; • Удаляйте неиспользуемые переменные; • Объявляйте и инициализируйте переменные непосредственно перед использованием; • По мере возможности помечайте переменные как const (final); • Проверяйте значения входных параметров.
Область видимости переменных • Локализуйте обращения к переменной (можно измерить интервал – количество строк - между обращениями); • Минимизируйте время жизни переменной в коде (можно измерить количеством строк); • Начинайте с самой ограниченной области видимости и расширяйте ее только при необходимости ; • Разбивайте группы связанных команд на отдельные функции.
Персистентность (время жизни) Где и сколько «живут» переменные? • Внутри блока кода или функции; • Пока не будут «убиты» (или до уборки мусора); • До конца выполнения программы; • Всегда (между запусками программы). Переменная может «испортиться»! Поэтому нужно: • Проверять значения перед использованием; • «Убирать за собой» после использования; • Инициализировать данные перед использованием.
Время связывания Когда переменная связывается со своим значением? • При написании кода (magic numbers); • При компиляции (именованные константы); • При загрузке программы; • При создании объекта; • По требованию. Чем позднее происходит связывание – тем гибче получается код програмы.
Единственность цели Каждая переменная должна использоваться с одной и только одной целью. Избегайте значений, имеющих скрытый смысл. Проверьте, что используются все переменные.
Имена переменных Имя переменной должно полно и точно описывать сущность, представляемую переменной. Давая имя – ориентируйтесь на проблему, а не на метод её решения.
Оптимальная длина имени Где-то между xи maximumNumberOfStudentInGroupAVT В среднем рекомендуется давать переменным имена длиной 10-15 символов. Допустимыми являются имена от 8 до 20 символов, если это оправдано. Если у вас в программе много коротких имен – проверьте их ясность (самодокументирующийся код). Используйте короткие имена для счетчиков и только когда время жизни переменной ограничено несколькими строками.
Спецификаторы Вычисляемые значения Total, Sum, Average, Max, Min, Record, String, Pointer, Index, Count– нужно добавлять в конец имени. Антонимы (добавляются в начало имени): begin/end; first/last; locked/unlocked; min/max; next/previous; old/new; opened/closed; visible/invisible; source/target; source/destination; up/down.
Индексные, временные, булевы переменные. Перечисления. • Индексам циклов присваиваются осмысленные имена, если цикл содержит более двух-трех строк или является вложенным; • Булевым переменным нужно присваивать имена, подразумевающие значения true или false (пример – done, error, found, success); • Избегайте отрицания в именах булевых переменных; • Имена элементов перечислений включают префикс перечисления; • Именованные константы называются в соответствии с сущностями, а не конкретными числами.
Типичные проблемы именования Проверьте себя. Есть ли у вас в программе: • имена, которые вводят в заблуждение? • имена с похожими значениями? • имена, различающиеся только одним или двумя символами? • имена, имеющие похожее звучание? • имена, включающие цифры? • имена, намеренно написанные с ошибками с целью сокращения? • имена, при написании которых люди часто допускают ошибки? • имена, конфликтующих с именами методов из стандартных библиотек или предопределенными именами переменных? • совершенно произвольные имена?
Метрики исходных текстов • Количество исполняемых строк кода на метод; • Цикломатическая сложность кода Равна числу замкнутых областей на графе потока управления (блок-схеме).
Спасибо за внимание Конец лекции.