08-01-2011, 05:58 PM
En général, "code proprement" en tout cas pour moi, ça veut surtout dire " être lisible ".
C'est essentiel quand on travaille à plusieurs, mais même seul, ça permet de gagner un temps fou quand un an ou deux après il s'agit de retrouver un bug à cet endroit.
C'est pas toujours évident de se replonger dans ce qu'on faisait il y a six mois.
En gros pour moi ça veut dire :
- des noms de variables et de fonctions très explicites : en lisant la fonction on doit comprendre ce que ça fait de façon non ambigüe.
Par exemple, si une fonction s'appelle getPosition elle ne doit retourne qu'une position, si elle retourne une position et un temps, renommmer en : getPositionAndTime. Accessoirement dans getPosition, on ne doit pas s'amuser à setter d'autres valeurs discrètement...
- Au niveau de l'écriture ou des algos, pour moi ça sert à rien d'écrire un code plus compacte ou plus efficace de 30% si c'est pour perdre en lisibilité. (sauf cas exceptionnelle).
Parce qu'écrire un algo très complexe, c'est pas sûr que quelqu'un d'autre soit en capacité de la modifier le jour ou il le faudra.
- Au niveau des commentaires, c'est important de ne pas en écrire trop qui sont inutile du style :
Par contre c'est IMPERATIF de commenter si vous faites quelque chose de non triviale ou d'inattendu.
C'est pour éviter que quelqu'un ne tombe sur le code et se demande pourquoi c'est comme ça. Ou ne soit tenter de virer cette ligne.
Un exemple relativement récent : dans du code pour openSSH, une fonction utilisait une variable non iniatialisée, chose que dans une cas normal on ne fait jamais. Vraisemblabement c'était pas commenté. Quelqu'un est passé derrière et en pensant bien faire à réinitialiser cette variable à 0. Résultat : grosse faille de sécurité dans SSH sous Debian.
(La raison d'utiliser une variable non initialisée, c'était pour augmenter 'l'aléatoire' dans le code. En lisant une zone qui est jamais identique à chaque appel et qui dépend de l'état du système)
Je pense qu'il y a pas mal d'autres sujets importants mais c'est tout ce qui me passe par la tête pour le moment.
C'est essentiel quand on travaille à plusieurs, mais même seul, ça permet de gagner un temps fou quand un an ou deux après il s'agit de retrouver un bug à cet endroit.
C'est pas toujours évident de se replonger dans ce qu'on faisait il y a six mois.
En gros pour moi ça veut dire :
- des noms de variables et de fonctions très explicites : en lisant la fonction on doit comprendre ce que ça fait de façon non ambigüe.
Par exemple, si une fonction s'appelle getPosition elle ne doit retourne qu'une position, si elle retourne une position et un temps, renommmer en : getPositionAndTime. Accessoirement dans getPosition, on ne doit pas s'amuser à setter d'autres valeurs discrètement...
- Au niveau de l'écriture ou des algos, pour moi ça sert à rien d'écrire un code plus compacte ou plus efficace de 30% si c'est pour perdre en lisibilité. (sauf cas exceptionnelle).
Parce qu'écrire un algo très complexe, c'est pas sûr que quelqu'un d'autre soit en capacité de la modifier le jour ou il le faudra.
- Au niveau des commentaires, c'est important de ne pas en écrire trop qui sont inutile du style :
Code :
// Get the Position
position = getPosition();
Par contre c'est IMPERATIF de commenter si vous faites quelque chose de non triviale ou d'inattendu.
C'est pour éviter que quelqu'un ne tombe sur le code et se demande pourquoi c'est comme ça. Ou ne soit tenter de virer cette ligne.
Un exemple relativement récent : dans du code pour openSSH, une fonction utilisait une variable non iniatialisée, chose que dans une cas normal on ne fait jamais. Vraisemblabement c'était pas commenté. Quelqu'un est passé derrière et en pensant bien faire à réinitialiser cette variable à 0. Résultat : grosse faille de sécurité dans SSH sous Debian.
(La raison d'utiliser une variable non initialisée, c'était pour augmenter 'l'aléatoire' dans le code. En lisant une zone qui est jamais identique à chaque appel et qui dépend de l'état du système)
Je pense qu'il y a pas mal d'autres sujets importants mais c'est tout ce qui me passe par la tête pour le moment.
S'amuse bien avec Ruby on Rails (pour l'instant...)