среда, 6 апреля 2011 г.

Имена в программировании. Часть 2.

Вторая часть

Сегодня я предлагаю обсудить именование всех типов полей,а также подскажу некие методики о том,как правильно строить имена полей, выбирать логически осмысленные слова и ставить их в правильном порядке,чтобы не было дальнейших проблем. Также мы подобно обсудим, как давать имена методам, нумерациям(последовательностям) и немного поговорим об общих концепция. Вперед!


Как назвать поле?

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

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

Задача: Ввести переменную,отвечающую за подсчет каких то объектов (юнитов,строений, месячных оплат, договоров и тп.)
Способ: Вообще я предпочитаю следующий тип именования - сначала мы пишем имя того,что считается, а затем добавляем Count (переменная именуется pascal Case, о чем было сказано в предыдущей статье http://cheprogrammer.blogspot.com/2011/03/1.html)
Пример:
class UnitClass
{
    int unitCount;
    // реализация
}


Задача: Ввести переменную, хранящую индекс какого либо объекта.
Способ: Реализация происходит аналогично с предыдущим примером, только в конце добавляется Index.
Пример:
class DeathStarClass
{
    int deathStarCount;
    int deathStarIndex;
    // реализация
}

Задача: Необходимо ввести новую переменную, отвечающую за хранение индекса массива и тп. Эта переменная обозначает некий элемент,нужный для использования в данный момент и хранит его индекс.
Способ: Здесь также, как и в предыдущих случаях, рекомендуется использовать комбинацию слов - Имя Переменной + Current , или в обратном порядке - Current + Имя Переменной
Пример:
void Main()
{
    int currentAnimal;
    for(int i = 0;i < animalsCount;i++)    // некое обобщение двух примеров
    {
        if(//какое то условие)
        {
            currentAnimal = i;
        }
    }
}


Имя поля типа bool (логическое значение)
С булевскими переменными дело обстоит гораздо проще - вам просто надо создать комбинацию с логическим смыслом вашей переменной и спереди поставить глагол is ("быть"). Наличие глагола в имени переменной интуитивно наталкивает уже на некую проверку о том, сделано ли что-либо, совершалось ли какое-либо действие и относится ли данный объект к какому то типу, классу, логическому делению и тп.)
Пример:

bool isShown, isBig. isChecked;

Данный пример наглядно показывает преимущество перед следующими именами.

bool Shown, Big. Checked;

Быть может вы, как разработчик проекта, и не придаете этому особого смысла, но человек, читающий ваш код, будет в явном недоумении - мельком пробежавшись по коду, он на некоторое мгновение запомнит, что это логическая переменная, но потом,спустя несколько строчек обильного кода,забудет, и будет неприятно удивлен, когда в каком либо узком месте не сможет понять, что же это такое - Shown. Некая энумерация? Состояние? Статус? Целое значение, взятое откуда то? Строка? Поверьте, это вызовет волну недоумения и у вас. Так что лучше заранее позаботиться о том, чтобы все было построено интуитивно понятно.

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

Для наглядности и продуктивного использования  автосинтаксиса в IDE не целесообразно давать имена, начинающиеся на слова str, string по причине того, что в выпадающем списке автосинтаксиса элементы будут отсортированы так, что ваша переменная окажется на позиций 10-15 ниже от ключевого слова string, что обяжет вас вводить string + первую букву переменной (хотя, и то не факт,что будет сразу выбрана ваша переменная). Поэтому я рекомендую ставить идентификатор string после имени переменной.
Пример:

string blaBlaString, startShipTrooperName, rebelPrincessName;

Опять же, здесь используется некая комбинация того,за какой объект отвечает переменная и его свойство, то есть мы можем вывести некоторую формулу именования ВСЕХ ТИПОВ ПОЛЕЙ, то есть:

Имя_Объекта( Характеристика_Объекта) + Свойство(Объекта/Характеристики)

Или наоборот

Свойство(Объекта/Характеристики) + Имя_Объекта( Характеристика_Объекта).

Использовать конкретную формулу надо по ситуации - для некоторый задач подходит вторая формула ( логические типы, целочисленные типы ), а для других - первая ( строковые переменные). Выбирать тип надо в зависимости от:
  • Удобства понимания
  • Быстрого доступа в автосинтаксисе
  • Ваших личных предпочтений =)

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

Тип_Данных_Переменной + Смысловая_Нагрузка

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

На этом пока все. В следующей части статьи мы рассмотрим именование структур, методов и перечислений (enum). Именование классов и пространств имен было рассмотрено в первой части статьи http://cheprogrammer.blogspot.com/2011/03/1.html . Также там были рассмотрены некие базовые условия именования объектов. До скорой встречи!

Комментариев нет:

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