Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Конструкции с оператором switch



 

В конструкциях с оператором switch используйте отступы таким образом, чтобы четко выделить различные варианты:

switch(переменная)

{

case Значение_1:

Oперация_1();

break;

case Значение_2:

Операция_2();

break;

default;

assert(" Ошибочное действие" );

break;

}

 

Текст программы

 

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

• Используйте пробелы, чтобы сделать текст программы более разборчивым.

• Не используйте пробелы внутри ссылок на объекты и массивы (., ->, [ ]).

• Унарные операторы логически связаны со своими операндами, поэтому не ставьте между ними пробелов. К унарным операторам относятся следующие: !, ^, ++, --, -, * (для указателей), & (преобразования типа), sizeof.

• Бинарные операторы должны иметь пробелы с обеих сторон: +, =, *, /, %, > >, < <, <, >, ==, ! =, &, I, & &, ||, ?:, -=, += И Т.Д.

• Не используйте отсутствие пробелов для обозначения приоритета (4+ 3*2).

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

• Круглые скобки не должны отделяться пробелами от заключенных в них параметров.

• Ключевые слова, такие как if, следует отделять пробелами: if (а == b).

• Текст комментария следует отделять пробелом от символов //.

• Размещайте спецификаторы указателей и ссылок рядом с именем типа, а не с именем переменной, т.е.

char* foo;

int& theInt;

а не:

char *foo;

int & theInt;

• Не объявляйте больше одной переменной в одной строке.

 

Имена идентификаторов

 

Ниже перечислены рекомендации для работы с идентификаторами.

• Имена идентификаторов должны быть такими, чтобы по ним было легко понять назначение идентификатора.

• Избегайте непонятных сокращений.

• Не жалейте времени и энергии для подбора кратких, но метких имен.

• Нет смысла использовать венгерскую систему имен (устанавливать связь между типом переменной и первой буквой ее имени). В языке C++ строго соблюдается контроль за соответствием типов, и нет никакой необходимости придумывать дополнительные средства контроля. Для типов, определяемых пользователем (классов), венгерская система имен вообще теряет смысл. Исключением может быть разве что использование префикса (p) для указателей и (r) для ссылок, а также префиксов its или my для переменных-членов класса.

• Короткие имена (i, p, x и т.д.) должны использоваться только там, где их краткость делает код более читабельным, а использование настолько очевидно, что в более описательных именах нет необходимости.

• Длина имени переменной должна быть пропорциональна ее области видимости.

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

• Имена функций (или методов) обычно представляют собой глаголы или отглагольные существительные: Search(), Reset(), FindParagraph(), ShowCursor(). В качестве имен переменных обычно используются абстрактные существительные, иногда с дополнительным существительным: count, state, windSpeed, windowHeight. Логические переменные должны называться в соответствии с их назначением: windowIconized, fileIsOpen.

 

Правописание и использование прописных букв в именах

 

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

• Используйте прописные буквы и символ подчеркивания, чтобы отделить слова в имени идентификатора, например SOURCE_FILE_TEMPLATE. Однако имена, полностью состоящие из прописных букв, в C++ довольно редки. Они используются разве что для констант и шаблонов.

• В именах других идентификаторов сочетаются строчные и прописные буквы с символами подчеркивания. Имена функций, методов, классов, типов и структур должны начинаться с прописных букв. Переменные-члены или локальные переменные обычно начинаются со строчных букв.

• Константы перечислений должны начаться несколькими строчными буквами, представляющими аббревиатуру имени перечисления, например:

enum TextStyle

{

tsPlain,

tsBold,

tsItalic,

tsUnderscore,

};

 

Комментарии

 

Комментарии значительно облегчают понимание программы. Иногда работа над программой прерывается на несколько дней или даже месяцев. За это время можно забыть, что делается в той или иной части программы либо зачем был написан определенный фрагмент кода. Проблемы могут также возникать в том случае, если ваш код анализирует кто-то другой (а не вы сами). Комментарии, используемые в соответствии с согласованным и хорошо продуманным стилем, оправдывают затраченные на них усилия. Предлагаю несколько советов, которые стоит помнить при использовании комментариев.

• Везде, где возможно, используйте для комментариев стиль C++, т.е. символы //, а не пары символов /* */.

• Комментарии более высокого уровня гораздо важнее, чем описание отдельного метода. Поясняйте смысл происходящего, а не дублируйте словами выполняемые операции, как в этом примере:

n++; // n инкрементируется на единицу

Этот комментарий не стоит времени, затраченного на его ввод. Уделите внимание семантике функций и блоков кода. Опишите, что делает функция. Укажите побочные эффекты, типы параметров и возвращаемые значения. Опишите все допущения, которые были сделаны (или не сделаны), например " предположим, что n неотрицателен", или " функция возвращает -1, если x имеет недопустимое значение". В случае ветвления программы указывайте, при каких условиях будет выполняться эта часть кода.

• Используйте законченные предложения с соответствующей пунктуацией и прописными буквами в начале предложений. Потом вы скажете себе за это спасибо. Избегайте условных обозначений и сокращений, понятных только вам. То, что сейчас кажется очевидным, через несколько месяцев может показаться абсолютно непонятным.

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

 

Организация доступа к данным и методам

 

Организация доступа к данным и методам также должна подчиняться определенным правилам. Ниже приведен ряд советов, касаюшихся того, как нагляднее описать в программе различия в доступе к ее разным членам.

• Всегда используйте спецификаторы public:, private: и protected:. Не следует полагаться на установки доступа, делаемые по умолчанию.

• Сначала объявите открытые (public) члены, затем защищенные (protected: ), а за ними закрытые (private: ). Объявляйте переменные-члены после методов.

• Сначала объявите конструктор (конструкторы), а затем — деструктор. Сгруппируйте вместе перезагружаемые методы и методы доступа.

• Методы и переменные-члены внутри каждой группы желательно расположить по именам в алфавитном порядке. Следует также упорядочить по алфавиту включения файлов с помощью директивы #include.

• Несмотря на то что с замещенными функциями использование ключевого слова virtual необязательно, лучше им не пренебрегать. Оно напомнит вам, что данная функция является виртуальной, и обеспечит преемственность объявлений.

 

Определения классов

 

Старайтесь сохранять порядок определения методов таким же, как и в объявлении. Это ускорит поиск нужного метода.

При определении функции размещайте тип возвращаемого значения и все другие спецификаторы на предыдущей строке, чтобы имя класса и функции располагалось в начале строки. Это значительно облегчит поиск функций.

 

Включение файлов

 

Старайтесь избегать этого в файлах заголовков, кроме случая включения файла заголовка базового класса, от которого производится данный класс. Использование директив #include также необходимо в тех случаях, когда в объявляемом классе используются объекты другого класса. Для классов, на которые просто делаются ссылки, достаточно будет передать ссылку или указатель.

Если же все-таки необходимо включить некоторый файл в программу, сделайте это в файле заголовка, даже если вы полагаете, что этот файл будет включен и в файле источника.

 

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

 

Макрос assert()

 

Используйте макрос assert() без всяких ограничений. Он не только помогает находить ошибки, но и облегчает чтение программы. Этот макрос также помогает сконцентрировать мысли автора на том, что является допустимым, а что — нет.

 

Ключевое слово const

 

Используйте ключевое слово const везде, где считаете нужным: для параметров, переменных и методов. Часто существует потребность в использовании как константных, так и неконстантных версий некоторых методов. Будьте очень осторожны при явном приведении типа с константного к неконстантному и наоборот (хотя иногда такой подход оказывается единственным способом решения проблемы). Убедитесь в целесообразности этих действий и добавьте подробный комментарий.

 

 

Сделаем еще один шаг вперед

 

Долгие три недели вы отдали усердной работе над освоением средств программирования языка C++ и теперь вполне можете считать себя компетентным программистом C++. Но на этом ни в коем случае нельзя ставить точку. Несмотря на то что, прочитав эту книгу, вы узнали много полезных вещей, гораздо больший объем вам еще предстоит узнать, причем сначала имеет смысл познакомиться с источниками ценной информации, благодаря которой из новичка вы превратитесь в опытного программиста C++.

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


Поделиться:



Популярное:

Последнее изменение этой страницы: 2017-03-08; Просмотров: 389; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.031 с.)
Главная | Случайная страница | Обратная связь