salut,

Dans l'ensemble pour moi c'est ok :-)
(c'est interessant de voir comment les autres programmeurs s'organisent dans leur prog)

Je commence alors ? :-)

Voici les conventions que j'utilise (enfin, presque ;-) ). Ce ne sont pas forcément des propositions à adopter, mais à débattre. C'est juste pour faire une liste de départ.

- Chaque fichier de code contient un entête indiquant le ou les auteurs du code figurant dans ce fichier, la licence sous laquelle est placée ce code (en l'occurence GPL 2 et + pour nous) et une ou deux lignes résumant le contenu du fichier (rôle du code qui s'y trouve)

- Chaque fichier est organisé en sections dans l'ordre suivant : « includes » généraux, variables globales au fichier, fonctions « privées » utilisées uniquement par le code contenu dans le fichier, fonctions « publiques » pouvant être utilisées par le code contenu dans le fichier ou situé dans d'autres fichiers, code principal du fichier (« main »). Chacune des sections est optionnelle, mais elles sont toujours placées dans cet ordre

- le nom des variables globales est en majuscules. Les variables globales composées de plusieurs mots utilisent le caractère « _ » pour séparer ces mots.

- l'utilisation d'une variable se fait en utilisant la forme « "${nom_var}" ». Les guillemets sont optionnels dans certains cas spécifiques.

- le nom des fonctions « privées » commence par un « _ ». Les fonctions « publiques » commencent par une lettre ou un chiffre. Le fait de les distinguer permet de savoir rapidement s'il faut chercher la déclaration d'une fonction dans le même fichier ou non.

- chaque fonction est précédée d'un commentaire indiquant son rôle, la nature et le rôle de ses arguments, éventuellement de la valeur de retour et sa nature, la manière dont elle est retournée (dans une variable globale ou écrit sur stdin) et les différents codes d'erreur pouvant être retournés et leur motif.

- L'indentation du code ne se fait qu'avec des caractères espaces, pas des caractères tabulations (je sais, ce n'est pas le cas dans tous les fichiers de Ncooker, mais je suis en train de le faire au fur et à mesure que je repasse dans chaque fichier :-) ). Une tabulation équivaut à quatre espaces.

- Indentation pour if :
if <condition>; then
   <code si condition vraie>
elif <condition; then
   <code si condition vraie>
else
   <code si condition vraie>
fi

- indentation pour for :
for <var> in <list>; do
   <code>
done
for (( ... ; ... ; ... )); do
   <code>
done

- indentation pour while :
while <condition>; do
   <code>
done

- indentation pour until :
until <condition>; do
   <code>
done

- indentation pour case (les caractères « ) » de chaque ligne <case*> sont alignés) :
case <var> in
   <case1> ) <code>;;
   <case2> )
       <code>
   ;;
esac

- indentation pour une déclaration du fonction :
<name> () {
   <code>
}

Quoi d'autre :-) ? ...

Un truc que je n'ai pas utilisé pour Ncooker, mais que j'utilise lorsque je développe en PHP, c'est d'indiquer dans le nom d'une variable son type et sa portée. Je sais parfaitement que les variables ne sont pas typées, mais généralement, chaque variable possède une valeur d'un type bien déterminée tout au long de son existence. J'utilise cette convention :

Portée :
g = globale
l = locale

Type :
a = array
i = integer (ou plutôt un nombre de manière générale)
s = string
m = mixte (la variable contient des valeurs de types différents tout au long de son existence)

Le format des noms de variables est le suivant :

<portée>_<type(s)><nom>

Par exemple :

« g_sName » est une variable globale contenant une chaîne de caractères
« l_iCount » est une variable locale à une fonction contenant un nombre
« g_asURLs » est un tableau global de strings
« l_mValue » est une variable locale pouvant contenir soit un nombre, soit des caractères
etc ...

grâce à cette notation, je repère très rapidement la portée et le type d'une variable dans mon code sans avoir à chercher sa déclaration ou à rechercher dans le code le type de valeur qui lui est affecté.

Pour les fonctions qui retourne une valeuur, j'indique également le type pour la valeur de retour dans le nom :

iGetValue() retourne ainsi un nombre
sGetURL() retourne une chaîne

Voilà, à débattre :-) ...

++
Gontran

_______________________________________________
Nasgaia-dev mailing list
[email protected]
https://mail.gna.org/listinfo/nasgaia-dev



Répondre à