JeuWeb - Crée ton jeu par navigateur
Coder propre - Partie 1 - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Coder propre - Partie 1 (/showthread.php?tid=2676)



Coder propre - Partie 1 - Shivaan Keldon - 13-06-2008

Bonjour à tous
Etant un programmeur professionnel depuis 8 ans, j'avais envie de vous faire partager certaines règles, méthodes ou automatismes de la programmation qui pourraient vous être utile aussi bien pour votre propre codage que pour la communication de celui-ci avec les autres

1) Les commentaires
Beaucoup de programmeurs (généralement amateurs, sans être péjoratif) zappent volontairement les commentaires pour gagner du temps sur la production de code. C'est, de mon point de vue, une grosse erreur. En effet, les commentaires sont utiles pour plusieurs raisons. Ils permettent :
- d'exprimer la logique du code dans un langage facilement compréhensible par tous
- de garder un historique
- de s'y retrouver facilement à la lecture du code (que ce soit par quelqu'un d'autre, ou par soi-même quand on a plus vu le code depuis longtemps)
- de générer de la documentation grâce à des outils
- de retrouver facilement quelle est l'utilité d'un bout de code, d'une fonction ou d'une variable
Il est donc très important de fournir des commentaires complets, d'autant plus que le moteur de compilation ou d'interprétation les zappe automatiquement. Voici quelques exemples

a) Fonction ou classe
Code PHP :
<?php 
/**
* Fonction getObject()
* retourne l'objet après qu'il soit alimenté par la base de données
* Params : (int) id
* Return : (objet) monObjet
* version : 1.0
* autheur : Shivaan Keldon (email)
* date : 10/06/2008
****
* modif : ajout de la propriété nom
* version : 1.1
* autheur : Shivaan Keldon (email)
* date : 11/06/2008
**/
function getObject($id) {
...
}

b) Variables
Code PHP :
<?php 
$nom
= ""; // nom du client
$i = 0; // compteur lors de la boucle des contacts
$html = ""; // code HTML à afficher à la fin du traitement

c) Traitements
Code PHP :
<?php 
/* si l'utilisateur est identifié */
if (isset($_SESSION["user"])) {
...
}

/* boucle sur chaque contact */
for ($i=0; $i<count($tabContact); $i++) {
...
}

Alors certes, il ne faut pas non plus mettre un commentaire à chaque ligne. Mais en mettre aux endroits les plus importants permet de synthétiser très vite le code, et de s'y retrouver plus facilement

2) Notation Hongroise & Camel Case
Il s'agit de deux conventions de nommage, c'est à dire une façon d'écrire du code. C'est une manière d'écrire les variables, fonctions, classes ou objets qui permet de retrouver facilement leur utilité (ou utilisation)

a) La notation Hongroise
Il s'agit ici de préfixer les variables de leur type. une variable de type integer s'appelerait donc ivariable. Bien que Php ne soit pas un langage typé (dans le sens ou on a pas besoin de le préciser), cette convention n'est pas forcément utile. mais prenez quand même le réflexe de l'utiliser, car rien qu'au nom de la variablé, vous saurez quel type elle contient. Voici la description des préfixes en fonction du type :

Code PHP :
<?php 
prefixes description
i int
(entier)
n short int (entier court)
l long int (entier long)
f float (nombre a virgule flottante)
d double (float double)
c char (caractère)
by byte (caractère non signé)
b boolean (booléen true/false)
s string (chaîne de caractères)
w word (mot = double octet)
dw double word (double mot)
sz zero-terminated string (chaîne de caractères terminée par un char zero)
str string object (objet String)
h handle
pt point
rgb rgb triplet
f
(fd?) file (fichier)
v void
u unsigned
(non signé)
p pointer (pointeur)
a ou ar array (tableau)
m_ member variable (variable membre)
g_ global variable (variable globale)
s_ static variable (variable statique)

b) Camel Case
Cette convention précaunise la mise en majuscule de la première lettre d'un mot contenu dans un nom de variable, de fonction ou autre. Il y a deux types de Camel Case, le Upper (toutes les premières lettre en majuscule) et le Lower (on garde le premier mot en minuscule). Combiné avec la notation hongroise, voici ce que ça donne :

Code PHP :
<?php 
sClientNom
= ""; // variable : nom du client
getUserById(id) {...} // fonction
class User {...} // classe
$user = new User(); // objet

Il est évident que pour que ces deux conventions fonctionnent, il faut donner des noms explicites. En fait, en règle générale, les noms courts ($i, $j, etc) ne doivent être utilisés que pour les traiments de boucle (for, while). Pour toute autre utilisation, n'hésitez pas à utiliser des noms longs ($maVariableQuiSertACa par ex). Même si ça demande plus de temps pour écrire le code, ça le clarifie et aide facilement quiconque doit le lire.

3) Indentation
Toujours dans un soucis de clarifier le code, ayez le réflexe de l'indenter. C'est à dire utiliser la tabulation pour la mise en forme. Voici un exemple avec et sans indentation. A votre avis, lequel est le plus lisible ?

Code PHP :
<?php 
// sans
$test = "";
if (
$var1==0)
$test = "non";
else {
for (
$i=0; $i<$var1; $i++) {
if (
$i==$var1)
$test = "fini";
else {
$test = "en cours";
maFonction($i);
}}}

Code PHP :
<?php 
// avec
$test = "";
if (
$var1==0)
$test = "non";
else {
for (
$i=0; $i<$var1; $i++) {
if (
$i==$var1)
$test = "fini";
else {
$test = "en cours";
maFonction($i);
}
}
}


Voilà, je vais m'arrêter là pour la partie 1, histoire de ne pas faire un message de 5 pages Smile