#Руководство по оформлению parser3 кода
-
Файлы должны использовать только кодировку «UTF-8»
-
Для форматирования текста используются табы
-
Именование классов:
- имя - существительное
- имя должно быть в нижнем регистре
- для разделения слов в именах используется нижнее подчеркивание
- пример:
page_param
-
Именование свойств класса:
- имя - существительное
- имя должно начинаться с нижнего подчеркивания
- имя должно быть в нижнем регистре
- для разделения слов в именах используется нижнее подчеркивание
- пример:
_path_root
-
Именование методов:
- имя - глагол
- имя должно быть в нижнем регистре
- для разделения слов в именах используется нижнее подчеркивание
- пример:
add_page
-
В методе рекомендуется объявлять все переменные локальными
- пример:
@add_page[][res;temp]
- пример:
-
В методе необходимо обращаться к свойствам класса через системную переменную self
- пример:
$self._path_root
- пример:
-
При написании кода должны использоваться для отступа табы, а не пробелы
-
После логического блока должна быть 1 пустая строка
-
После метода должны быть 2-3 пустых строки
-
Управляющие структуры
if,while,foreach,menuне должны быть в 1 строку, кроме очень простых случаев -
Каждый класс, метод должен содержать комментарии
-
Комментарии к классам должны содержать следующие описания:
- Самого класса
- Классы от которого зависит сам класс - @depend
- Cвойств класса - @property
- Методов класса - @method
-
Комментарии к методам должны содержать следующие описания:
- Самого метода.
- Параметров - @param {type}.
- Возвращаемого значения - @result {type}.
-
Следующий код представляет собой краткий пример верного следования правилам:
##
# Описание класса
#
# @depend
# some_class
#
# @property
# _path_root
# _value
#
# @method
# to_method
# add_page[]
##
@CLASS
page_param
##
# Инициализация свойств класса
# _path_root - Описание свойства класса
# _value - Описание другого свойства класса
##
@auto[path]
$_path_root[/path/folder/]
$_value[value]
##
# Демонстрация стиля комментирования
# и отделения логичеких блоков 1-ой строкой
#
# @param {hash} - хеш с данными
# @param {hash.name} - имя
# @param {hash.status} - статус 0|1
#
# @result {string|NULL} - статус
##
@to_method[hash][status]
$status[NULL]
^if(def $hash){
^hash.foreach[key;value]{
$status($hash.status)
}
}
$result[$status]
##
# Демонстрация объявления локальных переменных
# и вызов свойств класса
#
# @result {string}
##
@add_page[][res;temp]
$res[$self._path_root]
$temp[$self._value]
$result[$value]
^use[/path/to/myclass.p] - подключение класса
$myclass:some_var - получение свойств класса
^myclass:some_method[] - статический вызов класса
$object[^myclass::some_constructor[]] - конструктор класса
$object.some_var - получение свойств класса
^object.some_method[] - динамический вызов класса
Есть глобальный класс MAIN
то есть можно делать так
^MAIN:if(def $var){} - вызов обычного ^if
$MAIN:my_var - получение глобальной переменной
# Плохо
^if(def $form:page){
$page($form:page)
}{
$page(1)
}
# Хорошо
$page(^form:page.int(1))
@text[]
$user[^user:new[]]
$user.login[admin]
$user.password[^hash_make[MyPassword]]
$user[^user.save[]]
^user.assign_role[admin]