Qu’est ce qu’un bon code source ?

Suite à un poste indispensable de vinch, je me suis dis que j’allais ouvrir le débat sur les bonnes pratiques de la programmation.

Qu’est ce qu’un bon code source ?
Un code ultra concis et optimisé ? Pas forcément…
Il est de plus en plus rare de travailler seul sur un projet.
Pour la compréhension des personnes travaillant avec vous ou qui reprendront le projet, il est bon de mettre en place toute une série de conventions.

Conventions de nommage et de codage

Chacun a ses propres habitudes mais il est nécessaire de formaliser certaine chose avant le début de votre projet.

Le nom de vos classes, fonctions,… variables doivent avoir un sens et respecter une certaine logique.
Leur nom doit être relativement explicite pour que chacun puisse s’y retrouver facilement.

Si vous appelé vos variable :

1
2
3
4
$var1 = 123;
$var2 = 456;
$var3 = 789;
$var4 = 'abc';

Je souhaite bonne chance à la personne qui devra comprendre votre code.

Mieux vaut un exemple qu’un grand discoure :

Notre classe Produit

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php 
Class Produit
{
	private $nom;
	private $reference;
 
	public function __construct($nom, $reference)
	{
		$this->nom = $nom;
		$this->reference = $reference;
	}
 
	// GET
	public function getReference() { return $this->reference; }
	public function getNom() { return $this->nom; }
 
	// SET
	public function setReference($reference) { $this->reference = $reference; }
	public function setNom($nom) { $this->nom = $nom; }
}
?>

Utilisation de notre classe

1
2
3
4
5
<?php
$produit = new Produit('nom du produit', 'reference');
echo 'Nom : '.$produit->getNom() .'<br />';
echo 'Référence : '.$produit->getReference() .'<br />';
?>

Le code ci-dessus aussi basique qu’il soit est très clair, on sait directement de quoi il en est.

Au niveau de la structure, une bonne pratique serait par exemple de dire que :

Le nom des classes :

  • Commence toujours par une majuscule (ex : class Produit)
  • Les mots sont séparés par une majuscule (ex : class ProduitGenerique)

Le nom des fonctions :

  • Commence toujours par une minuscule
  • Les mots sont séparés par une majuscule (ex : getProduit())

Le nom des variables :

  • Commence toujours par une minuscule
  • Les mots sont séparés par une majuscule (ex : $produit)

Les des constantes :

  • Sont toujours écrite en majuscule
  • Les mots sont séparés par des _ (ex : MA_CONSTANT)

Cela n’a l’air de rien mais plus votre convention sera complète et précise, plus votre code sera clair. Il est évident que les différentes règles de la convention sont propre à chaque développeur (ci-dessus, ce n’est qu’un exemple) mais il sera important et essentiel qu’une fois déterminées, celles-ci soit suivies par l’ensemble des personnes travaillant sur le projet.

Pour plus de clarté, il est parfois bon d’écrire une ou deux ligne de codes en plus pour simplifier la lecture du code.

Tout comme il est important de commenter votre code. Cela ne parait pas toujours utile quand nous avons le nez de dans mais quand vous devrez revenir plusieurs moi après sur une fonction qui pose problème, vous serrez extrêmement content de retrouver votre petite ligne de commentaire qui explique la subtilité de votre fonction.
Mais attention, il est totalement inutile d’écrire un romain ou d’expliquer chaque ligne de votre code cela risquerait de le desservir en le surchargeant.

Et enfin pour les fanas de l’optimisation je leur répondrais que optimiser c’est bien mais pas au détriment de la compréhension du code.
Il ne faut pas oublié que nos machines (serveurs,…) évoluent à une vitesse folle. Donc vouloir optimiser à tout prix pour gagner une nano seconde c’est bien joli mais si votre code devient incompréhensible, cela ne vaux pas le coup.

Si vous voulez avoir un bel exemple de convention je vous laisse jeter un œil sur la convention de codage PHP du Zend Framework.

Bookmark and Share
Hervé — 13 juillet 2008 @ 15:26 Filed under: Php / mySql,Programmation Tag: , , , ,

4 commentaires »

  1. J’apporte ma pierre à l’édifice.
    Souvent il est plus adéquat de commenter en expliquant « pourquoi » on fait quelque chose, et non « ce que l’on fait ».
    A éviter aussi, les conditions alambiquées sans comparaison avec un booléen du genre :
    if ($Obj->doThat(fonct1(!$Obj2->doThis()))) { … }

    Commentaire by thomasi — 13 juillet 2008 @ 17:27
  2. Entièrement d’accord avec toi :D

    Commentaire by Hervé — 13 juillet 2008 @ 17:33
  3. Perso, je déteste que l’on mette une condition et son bloc de traitement, le tout sur la même ligne.
    Ou alors commencer l’accolade d’un bloc à la fin d’une ligne (les codeurs javascript sont champions pour ça), tout ça pour gagner un octet… Si c’est juste pour ça, il vaut mieux compacter ses fichiers avant de les mettre sur un serveur de prod!

    Autre chose, les variables a, b, d,… , c’est hyper pénible. Il faut que le nom d’une variable représente son contenu (sans tomber dans l’extrême avec des noms à rallonges évidemment).

    Pour les commentaires, c’est clair que traduire le code, ça sert à rien! Par contre, un résumé de ce qui se fait dans un gros bloc de code, ça peut aider à vite se retrouver dans une grosse source.

    Commentaire by Jojo — 22 juillet 2008 @ 11:32
  4. Même philosophie que toi mon jojo :D

    Commentaire by Hervé — 22 juillet 2008 @ 17:01

Flux RSS des commentaires de cet article. TrackBack URL

Laisser un commentaire