Back
#Pawn

Pawn moderne » Les conventions de nommage

Post published 2 years ago - Suggest Changes

​ Généralement, en Pawn comme en tout autre langage de programmation, il est important d'être consistant, de garder les mêmes règles dans quelconque projet ou programme lambda. Afin que le code soit plus lisible, et compréhensible aux autres ou aux contributeurs, il est important de respecter des conventions de nommages.

Cet article est non-exhaustif et tire beaucoup de ses notions et exemples du guide d'open.mp (https://open.mp/fr/docs/scripting/language/Style)

Accolades

On distingue deux écoles concernant les accolades, la méthode dite Allman et la méthode dite K&R qui est tout aussi valable en Pawn.

public OnGameModeInit()
{
    return 0;
}

Méthode Allman

public OnGameModeInit(){
    return 0;
}

Méthode K&R

Libre à vous de choisir celle qui vous convient le mieux, cependant, gardez à l'esprit que la consistance est la clé.

Nommage

Fonctions

Les fonctions doivent être nommées en PascalCase et écrites en anglais.

inline OnDataRetrieved()
{
    cache_get_value_name(0, "password", password, sizeof password);
}

Variables globales

Les variables globales doivent être utilisées avec le mot clé new et doit être préfixé avec g_Variable ou gVariable tout en utilisant PascalCase.

new bool:gLobbyState = false;

Variables locales

Les variables locales quant à elles doivent utiliser camelCase, et doivent être compréhensibles un strict minimum.

// Mauvais
new string:a[72];

// Correct
new string:password[72];

Énumérateurs

Si l'énumérateur est nommé, car facultatif, il doit être préfixé avec E_ ou e_ et doivent utiliser SCREAMING_SNAKE_CASE.

// Mauvais
enum ChatType{
	VeryLow = 0,
    Low = 1,
};

// Correct
enum E_CHAT_TYPE {
    ...
};

enum e_CHAT_TYPE {
    ...
};

Macros et directive de pré-processeurs

Les macros doivent utiliser SCREAMING_SNAKE_CASE, quelque soit son utilisation.

Il est cependant, déconseillé d'utiliser des macros / directives de pré-processeurs au risque de semer confusion à quiconque lira votre code, quelque soit son niveau.

#define internal        static
#define local_persist   static
#define global_variable static

Documentation

Les fonctions externes sont encouragées à être documenter pour que celles-ci soient plus facilement utilisables par autrui. // Cette fonction fait X, Y et Z choses et retournes A

// Cette fonction prend en paramètre l'ID du véhicule, et retourne l'état du capot du véhicule.
bool:GetHoodStatus(vehicleid)
{
	static
        engine,
	lights,
	alarm,
	doors,
	bonnet,
	boot,
	objective;
    
	GetVehicleParamsEx(vehicleid, engine, lights, alarm, doors, bonnet, boot, objective);
    
	if (bonnet != 1)
        return false;
    
	return true;
}