Skip to content

Latest commit

 

History

History
220 lines (150 loc) · 8.01 KB

CODE-STANDARDS.md

File metadata and controls

220 lines (150 loc) · 8.01 KB

ReSDK_A3 Стандарт кодирования

Основные принципы

  1. Соблюдайте стиль кодирования и конвенции, принятые в проекте ReSDK_A3.

  2. Используйте понятные и описательные имена переменных, функций, классов и других элементов кода.

  3. Документируйте ваш код, включая описание функций, классов и сложных алгоритмов. Используйте понятные комментарии, чтобы объяснить назначение кода и его логику.

  4. Избегайте дублирования кода. Если вы обнаружите повторяющиеся фрагменты кода, вынесите их в отдельные функции или классы для повторного использования.

Стиль кодирования

Отступы и форматирование

  • Используйте табуляцию для отступа вместо пробелов.

  • Отделяйте операторы пробелами для улучшения читаемости.

  • Функции и переменные, объявленные в файле модуля не должны начинаться с отступов.

Именование

  • Используйте осмысленные имена переменных, функций, классов и других элементов кода. Предпочтительно использовать смысловые слова или фразы, чтобы сделать код более понятным.

  • Используйте camelCase для имен переменных и функций. Начинайте их с маленькой буквы. Для отделения пространств имен и модулей используйте нижние подчеркивания.

  • Используйте PascalCase для имен классов. Начинайте их с большой буквы.

  • Макросы-константы должны быть определены полность в верхнем регистре

Комментарии

  • Добавляйте комментарии для объяснения сложной логики или важных аспектов вашего кода.

  • Используйте понятные комментарии, которые описывают назначение кода, а не просто повторяют его.

  • Для многострочных комментариев используйте /* */ вместо построчного использования //

Объявления

  • Локальные переменные должны начинаться с нижнего подчеркивания, что является особенностью платформы Arma 3.

  • Локальные переменные должны быть объявлены с модификаторм "private"

  • Глобальные переменные должны быть объявлены в файле модуля, либо в функции инициализации модуля. Не создавайте глобальные переменные внутри других функций.

  • Функции должны быть объявлены в файле модуля. Не создавайте функции при помощи команды "compile"

  • Методы классов, не выполняющие никаких действий и возвращающие константное значение должны быть определены через макрос "getterconst_func(name,value)"

  • Методы классов, не выполняющие никаких действий и возвращающие значения членов этого класса должны быть определены через макрос "getter_func(name,value)"

  • При объявлении методов типа "getterconst_func" или "getter_func" не допускаются переносы строк в возвращаемом значении. Если переносы необходимы для удобочитаемости используйте для этого обычный метод без указания параметров.

Модули

  • Серверные компоненты должны быть определены в папке src\host, а клиентские в src\client. Сам модуль должне быть объявлен в файле MyModuleName\MyModuleName_init.sqf, где MyModuleName - имя вашего модуля.

  • В модулях не должно быть объявления переменных или функций, использующихся в других модулях.

  • Серверные модули не должны использовать клиентские как и клиентские не должны использовать серверные.

  • Каждый файл модуля должен содержать фрагмент копирайта в верхней части файла.

Примеры

Отступы и форматирование

math_calculateSum = {
	params ["_a","_b"];
	private _result = _a + _b;
	_result
};

// Хорошо
if (condition) then {
    // code
};

// Хорошо
if (condition) then
{
    // code
};

// Плохо
if (condition)
then {
	// code
}

Именование

_x = 5; // Плохо
_itemCount = 5; // Хорошо

// Плохо
_my_variable = 5;

// Хорошо
_myVariable = 5;

// Плохо
my_function = {
    // code
};

// Хорошо
myFunction = {
    // code
};

// Плохо
MY_CONSTANT = 10;

// Хорошо
#define MY_CONSTANT 10

Комментарии

complexAlgoritm = {
	params ["_data"];
	
	// Инициализация счетчика
	private _count = 0;

	{
		// Проверка условия
		if (_x > 0) then {
			_count = _count + 1;
		};
	} foreach _data;

	// Возвращаем результат
	_count
};


// Плохо

// Функция делает что-то,
// что делает действия, которые помогут нам
// сделать классные вещи

// Хорошо
/* 
Функция делает что-то,
что делает действия, которые помогут нам
сделать классные вещи 
*/

Объявление методов

// Плохо
getterconst_func(getCount,getSelf(count));

// Хорошо
getter_func(getCount,getSelf(count));

// Плохо
getterconst_func(getArray,[
	1 arg 
	2 arg
	3
]);

// Хорошо
getterconst_func(getArray,[1 arg 2 arg 3]);

// Тоже хорошо
func(getArray)
{
	[
		1,
		2,
		3
	]
};

Объявление модуля и его членов

// ======================================================
// Copyright (c) 2017-2023 the ReSDK_A3 project
// sdk.relicta.ru
// ======================================================

// file: host\MyModule\TestModule_init.sqf

// Плохо
myFunction = {
    // code
};

// Хорошо
myModule_myFunction = {
    // code
};

// Плохо
_globalVariable = 10;

// Хорошо
myModule_globalVariable = 10;

Заключение

Соблюдение стандарта кодирования в проекте ReSDK_A3 поможет обеспечить читаемость, согласованность и понимание вашего кода всем участникам проекта. Пожалуйста, следуйте этим рекомендациям при внесении изменений в код проекта.

Благодарим вас за соблюдение стандартов кодирования и ваш вклад в проект ReSDK_A3!