Стиль программирования, соглашения об именовании

Хорошее имя имеет огромное значение для читабельности программы. Такие имена, как proc1, proc2, и proc3 ничего не означают, но даже кажущиеся достойными имена могут быть сомнительными. Например, чтобы назвать функцию, которая принимает два диапазона и вычисляет сумму первых, которая лежит в пределах второй, могут показаться уместными имена, как computeRangeWithinRange. К сожалению, это имя не дает никакой информации о порядке аргументов функции. Иногда это не будет проблемой, потому что интеллектуальная интегрированная среда разработки должна помочь вам определить имена аргументов функции, но это может ввести в заблуждение, когда код будет напечатан, или когда вы пытаетесь быстро прочитать код. Лучше дать имя computeRangeWithinFirstRange, которое по крайней мере, покажет порядок аргументов функции.

Общие соглашения об именовании

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

Есть много общего в именовании классов, функций и объектов. Обычно они разбиты на несколько основных категорий: си-стиль именования, camelCase и CamelCase. Си-стиль именования отделяет слова в имени, используя подчеркивание: this_is_an_identifer. Есть две формы CamelCase: первая начинается со строчной буквы, затем первая буква каждого последующего слова прописная, и вторая, где первая буква каждого слова прописная.

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

Может быть полезно использовать префиксы для определенных типов данных, чтобы напомнить вам, какие они есть: например, если у вас есть указатель pointer, стоящее перед ним p_ скажет вам, что это указатель. Если вы видите соответствие между переменными, одна из которых начинается с p_, а другая нет, то вы сразу понимаете, что это подозрительно. Также может быть полезно использовать префикс для глобальных или статических переменных, поскольку каждая из них ведет себя не так, как обычные локальные переменные. В случае глобальных переменных, особенно полезно использовать префикс для предотвращения конфликтов имен с локальными переменными (что может привести к путанице).

Наконец, частое соглашение — ставить подчеркивание перед закрытыми полями и методами класса, например: _private_data. Это помогает легче находить объявления методов в теле класса, а также покажет, что вы должны и не должны делать с переменной. Например, общее правило избегать возвращения неконстантных ссылок на поля класса от функций, которые являются более открытыми, чем поле. Например, если _age является закрытым полем, то открытая функция getAge, вероятно, не должна возвращать неконстантную ссылку, поскольку это дает полный доступ к закрытому полю!

Венгерская нотация

Венгерская нотация связана с префиксом переменных с информацией об их типе — например, является ли переменная integer или double. Обычно этого не стоит делать, потому что ваш IDE подскажет вам тип переменной, а такой стиль может привести к странным и сложным именам. Оригинальная идея венгерской нотации, была более общей и полезной: создание абстрактных имен с помощью префиксов, которые описывают использование переменной, а не ее представление. Есть префиксы, которые задают тип переменной, например: s - string, b - bool, g_ - global и т. д. А есть префиксы которые задают смысл этой переменной, например: i - index, n - number и т. д. Это может быть полезно для разделения указателей и целых чисел, а также может быть мощным средством разделения понятий, которые часто используются вместе, но которые не следует путать.

Сокращения

Сокращения опасны — гласные буквы полезны и могут ускорить считывание кода. Использование сокращений может быть полезно, когда имя очень длинное, потому что слишком длинные имена столь же трудно читать, как и слишком короткие. Будьте последовательны, если это возможно, и ограничивайте себя в использовании сокращений.

Общие сокращения включают «itr» для «iterator» или «ptr» для pointer. Даже такие имена, как i, j, k прекрасно подходят для счетчика цикла переменных (в первую очередь потому, что они так часто употребляются). Неудачные сокращения похожи на cmptRngFrmRng, которые, экономя лишь несколько букв, затрудняют чтение. Если вы не хотите набирать длинные имена, поищите авто-завершение в вашем текстовом редакторе. Вам не придется часто вводить полный идентификатор. (На самом деле, вы редко об этом задумываетесь: опечатки невероятно трудно обнаружить.)

Автор: Marienko L.
Дата: 02.10.2012
Поделиться:

Комментарии

  1. SymbianC

    Дарова. Скажите в примерах код сылки (на ресурс). Как вам обиснить, ну СЫЛКА на с++ как пишутса?, например LINK, LLINK у меня чет не работает. Спс.

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.