PHP

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

Начиная работать с различными языками программирования в сфере веб разработки, очень трудно запомнить все соглашения об именовании при переходах от одного языка к другому. Особенно, когда веб разработчики не имеют общего мнения по поводу того, что считать лучшей практикой программирования. Чтобы облегчить жизнь новичкам, в данной статье приводятся несколько общих соглашений об именовании.
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 часто используется данный метод.
Заключение

В данной статье рассмотрено несколько распространенных соглашений наименования, но их использование является личным делом каждого. В действительности, многие команды разработчиков пишут настоящие фолианты по правилам именования.
Добавлено: 20 Августа 2013 03:50:22 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...