Re :-)
Gontran wrote:
Je commence alors ? :-)
Messieur les anglais tirez les premiers !
- 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)
100 %.
Je remet une couche en disant que tous les fichiers de code DOIVENT
contenir la license et la liste des auteurs.
Ne pas le faire exposerait le code a une copie/détournement par un tier
qui ne serait pas dans l'esprit du libre...
Pour le choix des licences je ne sais plus si on en a déjà parlé (en
fait je sais mais je reviens à la charge :-p). En ce qui me concerne je
propose qu'il soit distribué sous
Creative Commons telle qu'elle est présentée ici :
http://creativecommons.org/licenses/by-sa/2.0/fr/
Ce qui me plait c'est la clareté et l'accessibilité (par rapport à la
GPL), la robustesse de Creative Commons (que la GPL a aussi),
l'internationalisation (un réel effort est fait de ce côté, ce qui n'est
pas le cas de la GPL). De très nombreuses organisation utilisent cette
license. Pour n'en citer que quelques unes : Linuxfrench, framasoft
(article intéressant :http://www.framasoft.net/article2185.html), l'AFUL
etc... Ce qui témoigne du sérieux et de l'intérêt que porte la
communauté du libre à cette license...
Dans tous les cas, quelque soit la license qu'on utilise il est de bon
gout de n'utiliser que des bouts de code libre (au cas où on doit en
emprunter chez les autres) et de prévenir leur développeur (en
particulier Martial, surtout si on change de license...)
- 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
Entièrement d'accord.
J'ajouterai : les sections sont délimités par des entêtes explicites du
style (à définir) :
###########################################
#### INCLUDES
####
###########################################
- 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.
100 % Ok
- l'utilisation d'une variable se fait en utilisant la forme « "${nom_var}" ».
Les guillemets sont optionnels dans certains cas spécifiques.
100% Ok. Question : les guillemets sont bien pour éviter les
désagréments avec les espaces dans les noms de paquets/chemins, c ça ?
Les cas particuliers sont pour le passage d'arguments multiples à une
fonction c ça ?
- le nom des fonctions « privées » commence par un « _ ».
100 % d'accord
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.
Pas d'accord pour qu'un nom de fonction commence par un chiffre (surtout
si elle est "publique"). Pour moi le fait qu'une fonction commence
par un chiffre rend le code peu lisible. Je dirais que le nom du
fonction devrait commencer par une lettre, amha.
- 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.
100 % Ok
- 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.
MDR !!! Gontran tu pensais faire passer ça sans que je le vois !!!! (on
a eu un petit débat ensemble sur TAB ou ESPACE pour l'indentation...).
Qu'est-ce qui t'a fait changer d'avis ?
Dans tous les cas je suis d'accord :-)
- 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>
}
A noter l'indentation "java like" pour les accolades :
toto () {
}
au lieu de l'indentation "C" classique :
toto ()
{
}
Perso je suis pour l'indentation "java like", depuis que je l'ai
découverte je ne peux plus m'en passer. Maintenant je comprends que ça
puisse
gêner plusieurs d'entre nous. Peut importe le choix qu'on fait. Ce qui
est important c'est qu'on utilise tous le même partout.
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
Je suis entièrement d'accord avec tous ça.
Je rajoute que tes "coding rules" sont utilisées par de très nombreux
développeurs dans le monde (au sein de la communauté et dans les
entreprises, pour ce que j'en ai vu). C'est aussi important pour tous
ceux qui voudraient nous rejoindre ou utiliser notre code.
Merci Gontran pour avoir mis tout ça en forme :-)
++
Chicha.