-
Notifications
You must be signed in to change notification settings - Fork 5
Code Style Guide
IvanPopov edited this page Dec 11, 2012
·
16 revisions
Для всех переменных, которые не входят в список зарезервированных слов, обязательны префиксы.
| Тип / Назначение | Префикс | Примеры | Дополнительно |
|---|---|---|---|
| [E]Enum | E | EParams, EBlendModes | E - для перечислений |
| [I]Interface | I | IEngine, IDisplayManager, ICamera | I - для интерфейсов |
| [U]Int[8,16,32,64] | i,n | iCount, iStride, iSize, nTotal, nBytes | i - для Int, n - для Uint-счетчиков |
| Constants | c | cFormat, csExtansion | Это может быть как константа строки(тогда префикс должен быть cs - const string), так и числа(c или ci, cf - для float). |
| String | s | sName, sValue, sHash | |
| Float[32,64] | f | fValue, fSumm, fResult | |
| Boolean | b,is,has,have,use,can | isEmpty, hasSemantics, bValuem, canRun | Используйте префикс b только в случаях, когда остальные заведомо не подходят. |
| Vectors | v[0-9][f,i] | v4fLength, v3fPosition, v2iCoord, v2iCenter | v - означает, что это вектор, далее число компонент вектора, далее тип компонент, f - Float, i - Int. |
| Quaternion | q | qRotation | q - означает, что это кватернион. |
| Matrix | m[0-9][f,i] | m4fProjection, m3fRotation, m2iScale | m - означает, что это матрица, далее размер, 3 - для 3x3 матриц, далее тип компонент, f - Float, i - Int. |
| Color | c([3,4][f,i]) | c4fRed, c3iBlue, cValue | c - означает, что это цвет, далее, опционально, число компонент, далее тип компонент, f - Float, i - Int. |
| Type | t | tHash, tData | используется для обозначения переменных, содержащих тип данных. |
| Object | p | pData, pVertexDeclaration, pObject | используется для обозначения переменных, содержащих ссылку на объект. Массивы также входят в эту категорию. |
| Function | fn | fnCallback, fn, fnSuccess | используется для обозначения переменных, содержащих функции. |
| Enumeration | e | eOptions, eFlag | используется для обозначения переменных, содержащих ключи или комбинации ключей из Enum'ов. |
Список зарезервированных слов, которые можно использовать без префикса.
- Все переменные в одну букву.
- tmp - для переменной, временного хранилища
- src - source, для обозначения входных данных.
- dst - destination, для обозначения выходных данных
- id - для численных идентификаторов.
- Все объекты движка(за исключением примитивных, вроде векторов) должны иметь интерфейсы.
- Интерфейсы описывают только публичные методы.
- Например для создания класса камеры, вы должны создать сначала интерфейс ICamera.
- Классы не могут содержать публичных переменных(за исключеним статических)
- Все переменные класса должны быть объявлена в самом начале.
- Все геттеры и сеттеры класса должны быть объявлены сразу за переменными.
- Все гетеры и сеттеры должны стоять парами(если они предназначены для одного и того же свойства)
- Публичные(public) и методы должны быть объявлены до защищенных(protected), а те в свою очередь до приватных. (private)
- Первым публичным методом всегда должен быть конструктор(если он вообще есть).
- У публичных методов никогда не должно быть ключего слова public.
- Статические переменные и методы должны распологаться в самом низу класса.
- Причем методы идут после переменных.
- Имена всех приватных переменных должны начинаться с _ (подчеркивания). Например: _sName, _pData ...
Vec2 {
x: number;
y: number;
private _bNomilized: bool = false;
constructor ();
constructor (v2f: Vec2);
constructor (x: number, y: number);
constructor (x?, y?) {
//...
}
set(): Vec2;
set (v2f: Vec2): Vec2;
set (x: number, y: number): Vec2;
set (x?, y?): Vec2 {
//...
}
private calcMagic(): void {}
static pOrigin: Vec2 = new Vec2;
}
- Порядок объявления методов в интерфейсе класса и самом классе должны совпадать.
- Доступ ко всем приватным переменным должен осуществляться через одноименные геттеры и сеттеры.
- Все геттеры и сеттеры должны быть помечены как @inline
- Для получения всевозможных простых(тех, которые в дальнейшем могут быть проинлайнены) свойств класса должны быть использованы геттеры.
- Все методы класса, которые выполняют схожую работу должны быть объявлены в одной группе.
- Группы методов отделяются друг от друга двумя(или более) пустыми строками.
- Методы класса должны быть объявлены в том порядке, в котором они используются в коде.
- Все одноименные методы(т.е. перегрузки) должны быть объявлены рядом, и отсортированы по числу аргументов.
Имена enum'ов должны начинаться с большой буквы, не могут содержать подчеркиваний а так же должны быть в названы в множественном числе. Исключения возможны, но типичные имена должны выглядеть так:
export enum EResourceItemEvents{
k_Created, //ресур создан
k_Loaded, //ресур заполнен данным и готов к использованию
k_Disabled, //ресур в данный момент отключен для использования
k_Altered, //ресур был изменен после загрузки
k_TotalResourceFlags
};
Для проверки типов данных, а akra engine существует ряд встроенных функций, они нужны для повышения читабельности кода и улучшения переносимости. Опепатор typeof НЕ РЕКОМЕНДОВАН к использованию. Если есть необходимость, используйте функцию typeOf(x:any):string
| Название | Назначение |
|---|---|
| isDef(x: any): bool | Проверка, не является ли x - undefined |
| isNull(x: any): bool | Проверка, является ли x - null |
| isBoolean(x: any): bool | Проверка, является ли x - bool |
| isString(x: any): bool | Проверка, является ли x - string |
| isNumber(x: any): bool | Проверка, является ли x - number |
| isFloat(x: any): bool | Проверка, является ли x - float |
| isInt(x: any): bool | Проверка, является ли x - int |
| isFunction(x: any): bool | Проверка, является ли x - function |
| isObject(x: any): bool | Проверка, является ли x - object |
| isArray(x: any): bool | Проверка, является ли x - array |
В коде определена константа DEBUG, определенная в TRUE для DEBUG сборки. //TODO