Несколько общепринятых соглашений об именовании

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

1. Подчеркивание перед именем свойства
Если рассматривать переменные или методы, имена которых начинаются с _, то сложно будет найти какое-нибудь магическое действие, сокрытое от глаз. Это просто соглашение об именовании, которое служит отличным напоминанием разработчику о том, что переменная/свойство/метод объявлен как private или protected, и не доступно вне класса.

PHP
// Данная переменная недоступна вне класса
private $_someVariable;
 
class MyClass {
   // Объявленный метод доступен только внутри данного класса или
   // класса, который наследует его.
   protected function __behindTheScenesMethod() {}
}

Обратите внимание, что подчеркивание в вышеприведенном коде НЕ ОБЪЯВЛЯЕТ переменную или метод как private. Для этого существует ключевые слова private/protected. Подчеркивание служит только в качестве напоминания (если придется вернуться к разбору кода спустя полгода)!

JavaScript
var Female = (function() {
   var _trueAge = 50,
        _trueWeight = 140;
 
   return {
      age : _trueAge - 15,
      weight : _trueWeight - 30
   };
})();
 
Female.age; // 35
Female.weight; // 110
Female._trueAge; // неопределенно  (причина -  свойство объявлено как private)

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

2. КОНСТАНТЫ, написанные заглавными буквами
Константа - это переменная со статическим значением, которое не меняется. Например, если в проекте требуется умножать какое-нибудь значение на величину налога, то вы можете назначить данный коэффициент, например, .06, константе (если налог измениться, будет удобно поставить новую цифру в одном месте, а не перетряхивать весь код). Однако не все языки имеют такой тип переменных. Следовательно, отличной практикой является использование только заглавных букв в написании имени константы, чтобы напомнить самому себе о данном факте. Это общее соглашение в мире JavaScript и оно используется для его встроенных констант, например, MATH.PI.

JavaScript
var TAXRATE = .06;

PHP
define('TAXRATE', .06);

3. Односимвольный префикс
Наверняка вам уже попадались переменные, имена которые начинались с какого-нибудь маленького символа, например "s" или "i".

$sName = 'Капитан Сорви-Голова';

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

Особенно неодобрительно на ее использование смотрят в мире JavaScript, так как в данном языке переменные не имеют жестко заданного типа. Представьте, что используя венгерскую нотацию, мы объявляем строку с именем, в котором первым символом стоит префикс "s", но чуть позже мы начинаем использовать данную переменную как целочисленную (integer)? В данном случае такая форма записи начнет работать против нас.

var sName = "Оберст-командор Мениторо Ла Цойг";
typeof(sName); // string
....
sName = undefined;
typeof(sName) // undefined

Символ доллара
Для пользователей jQuery: прежде чем стать на пьедестал и похвалить себя за неиспользование такого соглашения об именовании, спросите себя - использовали ли вы для переменных, значения которых обернуто в объект jQuery, символ доллара вначале? Если да, то знайте - это форма венгерской нотации. Назначение такого префикса состоит в том, чтобы информировать разработчика о свойствах переменной.

// Символ доллара напоминает, что данная переменная
// имеет доступ к методам jQuery.
var $container = $('#container');

Следует ли его использовать?
Ответ на поставленный вопрос полностью зависит от вас. Хотя многие разработчики jQuery используют префикс в виде символа доллара.

4. Первый символ в верхнем регистре
А как рассматривать “переменные”, имена которых начинаются с символа в верхнем регистре?

$response = $SomeClass->doSomething();
В вышеприведенном коде $SomeClass является классом, а не переменной. Данное соглашение о наименовании используется очень многими программистами. Когда возвращаешься к работе с кодом спустя некоторое время, такое именование сигнализирует, что имя используется для работы с классом, для которого доступны объекты и методы.

// Обратите внимание на заглавную M в имени класса.
class $MyClass {
   function __construct() {}
}

JavaScript
В JavaScript в действительности не используются классы, но есть функции конструкторы.

var Jeff = new Person();
Причина, по которой используется заглавный символ в имени конструктора (Person) заключается в том, что очень просто забыть ключевое слово new. В таких случаях JavaScript не выдает никаких сообщений, и они могут стать ночным кошмаром при поиске проблемы. А заглавный символ является весьма удобным флагом для разработчика при отладке.

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

function Person(name) {
  // Если опустить ключевое слово new, то будет использоваться конструктор window.
  // В данном случае будем компенсировать отсутствие и возвращать новый экземпляр
  if ( this.constructor !== Person ) {
    return new Person(name);
  }
 this.name = name;
}
 
// Намеренно "забыто" ключевое слово new
var Joey = Person('Костя');
Joey.name; // Костя

5. РазделениеСловЗаглавнымиБуквами против использования_подчеркиваний
Почему в одних случаях используют разделение слов в именах переменных с помощью заглавных первых букв, а в других разделяют слова символом подчеркивания? Как правильно? Правила целиком зависят от соглашений в вашей рабочей группе. Оба метода равнозначны.

// Используем заглавные буквы
var preacherOfSockChanging = 'Лейтенант Бу';
 
// Используем символ подчеркивания
var preacher_of_sock_changing = 'Лейтенант Бу';

Однако, не смотря на все вышесказанное, следует соблюдать правила именования, принятые в используемом языке программирования. Например, многие разработчики JavaScript используют разделение слов в переменных заглавными буквами, а программисты PHP предпочитают использовать подчеркивание. Хотя данный вопрос не является камнем преткновения. В Zend Framework широко используется разделение слов заглавными буквами.

6. Структура каталогов
Данный вопрос становится особенно острым при работе в команде. В таких условиях просто необходимо иметь продуманную структуру каталога проекта. Но даже при работе над небольшими задачами в одиночку не стоит складывать таблицы стилей и скрипты в одну большую кучу в корневом каталоге без какой-либо организации. Многие разработчики предпочитают размещать изображения, скрипты и таблицы стилей в подкаталогах с родительской директорией Assets (переводится как "средство").

/ Project Root 
  /Assets 
    / js 
      / min 
        script_min.js 
      script.js 
    / css 
      / min 
        style_min.css 
      style.css 
    / img 
      img1.jpg 
  index.html 
  otherFile.html 

Отметьте также наличие папок min, которые содержат динамически добавляемые минимизированные версии ваших скриптов и таблиц стилей.

7. Семантика
При создании разметки ваши id и классы должны описывать тип контента, но никак не презентационные аспекты. Например:

Очень плохо
<div id="немного-левее-и-чуть-чуть-выше"> Вася Пупкин  - дурак, курит табак. </div>

Лучше
<div class="section"> Вася Пупкин  - дурак, курит табак. </div>

Самый хороший вариант
<section> Вася Пупкин  - дурак, курит табак. </section>

Почему? Допустим спустя шесть месяцев вы решите, что прославлять Васю Пупкина стоит в секции, которая расположена немного-ПРАВЕЕ-и-чуть-чуть-выше? В данном случае ваш id сразу же потеряет смысл.

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

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

Вы используете тернарный оператор?
var name = 'Моня';
 
// обычное использование
if ( name === 'Родослав' ) {
  alert("Это я!");
} else {
  alert("Никого нет дома");
}
 
// Тернарный оператор
(name === 'Родослав') ? alert("Это я!") : alert("Никого нет дома");

Как насчет использования логического И для сокращения условных операндов?
var getTweets = true;
 
// Обычное использование
if ( getTweets ) {
 alert('Щас мы ево зачепим!');
}
 
// Логическое И
// Правая часть выражения не будет исполняться до тех пор, пока левая часть не будет иметь значение "true"
getTweets && alert('Щас мы ево зачепим!');

Очень многие разработчики косо смотрят на такое использование логического И, объясняя существенной потерей легкости чтения кода. Хотя это правильный аргумент, тем не менее, даже в jQuery часто используется данный метод.

Заключение
В данной статье рассмотрено несколько распространенных соглашений наименования, но их использование является личным делом каждого. В действительности, многие команды разработчиков пишут настоящие фолианты по правилам именования.
Теги:
именование
Добавлено: 15 Апреля 2018 07:21:15 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...