Skip to content

Latest commit

 

History

History
161 lines (130 loc) · 5.07 KB

File metadata and controls

161 lines (130 loc) · 5.07 KB

#Руководство по оформлению 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]

Пример использования Parser3

^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]