Стандарты оформления

  • Для обозначения вложенности блоков используется отступ табуляцией (НЕ пробелы). Для просмотра рекомендуется табуляция из четырех отступов. Сами отступы для обозначения вложенности обязательны;
  • Скобка, открывающая блок, распологается на одной строке с ключевым словом (if, while, do и т.д.):

if (1) {
}

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

if (1) {
}

  • Блоки, состоящие из одной строки распологаются целиком на одной строчке (включая открывающие и закрывающие скобки):

if (1) { print “Да!” }

  • Перед точкой с запятой пробелы НЕ ставятся;
  • Точку с запятой после операторов можно НЕ ставить в однострочном блоке;


if (1) { print “Да!” }

  • Вокруг большинства операторов ставятся пробелы (+ – = * / cmp <=> и т.д.):

$a = $b + 1;
$b += 1;
if ($a + 1) {}

  • Если в скобках расположено сложное вычисляемое выражение, то вокруг него ставятся пробелы:

if ( tinyXML($content) ) {}
$A[ tinyIndex($content) ];

  • Функциональные блоки разделяются пустыми строками, причем каждый из них начинается с комментария;
  • Else записывается с пробелами с обоих сторон:

} else {

  • После каждой запятой ставится пробел:

method( $a, $b, $c, $d );

  • Длинные строки прерываются после окончания оператора (исключения – условия с and и or);
  • Строки, расположенные на одном уровне вложенности, распологаются строго друг под другом на одном уровне отступов;
  • Следует избегать излишней пунктуации;
  • Если Вы можете что-то сделать, это вовсе не значит, что это стоит делать:

open(FOO,$foo) || die “Не могу!”;

лучше чем

die “Не могу!” unless open(FOO,$foo);

хотя и то и другое верно.

  • Если Вы не уверены в том, можно ли в коде обойтись без скобок – ставьте их;
  • Именование:

Class – названия классов пишутся с большой буквы (но состоят из маленьких);
$object – названия переменных пишутся маленькими буквами и подчеркиванием;
$CONSTANT – константы пишутся только большими буквами и подчеркиванием;
sub, method, function – функции, методы, процедуры пишутся маленькими буквами;
_sub_, _method_, _fuction_ – подчеркивание с двух или с одной из сторон указыват на скрытый характер метода;

  • Аналогичные правила существуют для именования ключей хэшей:

$hash->{key} – обычный ничего не значащий ключ;
$hash->{CONSTANT} – ключ указывающий на другой специальный объект (например, $keeper->{SQL}, $keeper->{TSQL});
$hash->{_hidden_} – два или одно подчеркивание указывают на скрытость, служебность ключа – им нежелательно оперировать извне;

  • Выбор названий для функций происходит по следующим правилам:

+ Используйте, пожалуйста, корретный и правильный английский язык. Грамматические ошибки недопустимы;
+ Используйте короткие имена функций, но без сокращений;
+ Рекомендуемые именования:

Действие_Объект – get_message(), get_messages(), get_children() (не забывайте про множественное число);
Действие_Принадлежность_Объект – get_message_body(), get_messages_bodies()

+ Для методов-флагов именования могут начинаться с is, has, например is_top(), has_childs();
+ Возможно использование постфикса _by_Что-то, особенно, если функция принимает одиночный параметр:

get_message_by_id(), get_user_by_login()

  • В вызове функции или метода всегда используются скобки, даже если параметров нет:

method()

  • Между названием функции и ее параметрами пробела НЕТ:

method($a) – правильно

  • Код, который более не нужен УДАЛЯЕТСЯ, а не комментируется. При необходимости сделать backup он делается в домашней директории разработчика, а НЕ в директории проекта;
  • Каждая большая компонента должна иметь секцию с комментариями <%doc>. Комментарии пишутся на русском языке (грамотном, по возможности) в кодировке utf-8.
  • Ключевые слова Mason, открывающие или закрывающие блоки (<%init>,<%args>...), можно писать как большими, так и маленькими буквами. Но обязательно отделать от кода (и html и perl) пустыми строками;
  • Когда переменные вставляются в контейнеры в HTML::Mason’е для вставки их в html-коде с обоих сторон от переменной должны идти пробелы!

<% $value %> – правильно

Организация запросов к БД
Начальная структура данных проекта
Объектная модель данных. Интеграция таблиц в Contenido
Стандарты разработки
Стандарты оформления