8. La « norme »
Tout comme il existe une norme dans le langage humain, par exemple : ne pas mettre d'abréviations dans une lettre de motivation, il en existe aussi avec les langages de programmation.
Cette norme n'est pas forcément à suivre, mais si vous vous en servez, il se peut qu'elle vous facilite la vie, ou encore qu'elle facilite la vie de ceux qui passent après vous.
Cette norme a pour but de fixer quelques règles de codage :
Les variables locales :
Nous avons vu que nous pouvions avoir des variables de divers types, cependant lorsque le code de la fonction est long, on ne sait plus trop qui contient quoi. C'est pour cela que vous devrez préfixer vos noms de variables d'une lettre (ou plus) en minuscule (en général) indiquant le type de la variable.
Type |
Préfixe(s) |
Exemple |
action |
a |
aTuer |
effect |
e |
eLigtd |
event |
ev |
evOnClose |
float (nombre décimal) |
f |
fSecond |
int (entier) |
i |
iNombre |
int (utilisé comme des booléens (true, false)) |
b |
bTrue |
location |
l |
lAller |
object |
o |
oTemple |
string |
s |
sPlayerName |
struct |
str |
strFX |
talent |
t |
tSkillLock |
vector |
v |
vVitesse |
A savoir aussi pour les noms de variables locales : il est d'usage d'utiliser une suite de majuscules/minuscules pour les nommer par exemple :
sPlayerName
Ce qui représente le nom du joueur.
Les variables globales :
Neverwinter Nights ne nous permet pas de déclarer de vraies constantes, et nous devons utiliser les variables globales comme des constantes. Nous utiliserons aussi les règles usuelles pour les noms de constantes :
Nous utiliserons donc les majuscules et le « _ ».
Par exemple :
Indentation :
Votre code doit être indenté pour bien montrer jusqu'où vont les différents blocs. Si on considère ceci :
void main()
{
if ( condition )
{
instruction;
}
else if ( condition )
{
instruction;
}
}
On y perd beaucoup en lisibilité. Imaginez un instant qu'il y ait beaucoup de blocs imbriqués... allez ensuite chercher l'erreur qui empêche le script d'être compilé : vous comprendrez que c'est assez dur de la trouver du premier coup. Cependant, en indentant de deux espaces tel que :
void main()
{
if ( condition )
{
instruction;
}
else if ( condition )
{
instruction;
}
}
L'indentation révèle plus facilement les erreurs possibles. Pour les mêmes raisons, évitez le code de ce type-ci :
void main() {
if ( condition ) {
instruction;
} else if ( condition ) {
instruction;
}
}
Bien sur, il prend moins de place mais il est moins lisible...
Utilisation des booléens :
Bioware n'a pas inclus de « vrais » booléens dans son script (pourtant, un vrai Booléen prend moins de place mémoire qu'un entier). Un booléen est, dans le cas des NWScript, un entier :
Evitez les syntaxes de condition suivante :
bTrue == 1
bTrue != 1
bTrue == 0
bTrue != 0
Et préférez au choix l'utilisation suivante :
bTrue == TRUE
bTrue != TRUE
bTrue == FALSE
bTrue != FALSE
Fonctions
Les variables utilisées dans la fonction doivent être déclarée après la déclaration de la fonction (pour plus de lisibilité) par exemple :
void Foo()
{
int i, j, k, l;
string s1, s2, s3, s4;
}
Aussi, évitez de mettre plusieurs instructions return dans vos fonctions : n'hésitez pas à passer par des variables auxiliaires. Au lieu de :
int Foo()
{
if ( condition )
return TRUE;
else
return FALSE;
}
Préférez ceci :
int Foo()
{
int bReturn = FALSE;
if ( condition )
bReturn = TRUE;
else
bReturn = FALSE;
return bReturn;
}