Excuses moi, Duarna, mais, j'aimerais que tu aie l'honneteté intellectuelle de ne pas prendre une phrase completement sortie de son contexte comme base de dénégation.
Bien sur, il est tout à fait vrai que le réglage adéquat du compilateur permet de retrouver les variables inutilisées, et parfois meme les variables non initialisées...
Mais la phrase de luc que tu site prend un sens tout à fait différent si tu la laisse dans le contexte complet:
Et quand on programme comme des cochons, et en plus que l'on utilise les déclarations en début de fonctions, on se retrouve donc avec des fonctions qui tiennent sur trois pages d'écran : une demi-page pour les variables, une et demi pour les traitements d'exception, et une pour le code effectif). Tu rajoutes à cela des variables qui ne sont plus utilisées -- pour cela les déclarations antiticipées c'est génial pour avoir des résidus qui polluent inutilement du code. Bref, c'est vite illisible, plus pénible à refactoriser, ...
Bien sur, la déclaration anticipée ne représente "qu'une goutte d'eau" dans la somme des problèmes que l'on peut rencontrer (dont la plupart sont souvent liés plus à la "non initialisation" qu'à la non utilisation).
Mais le sens de l'intervention de luc est que, si tu rajoute cette goutte d'eau à une série d'autres comportement "à risque" (allant de la mauvaise indentation/mise en forme à une taille excessive pour l'affichage du code de la fonction en passant par du code trop alambiqué, à force de "raccourcis" offert par le langage ou l'ajout de possibilité/le débuggage), la difficulté avec laquelle tu t'y retrouveras dans le code est bien plus que la simple addition de toutes les (petites) difficultés que chaque comportement implique... mais plutot de l'ordre de l'exponentielle des différentes difficultés
Mais, là, on aborde plus le problème des "bonnes" habitudes de programmation que le simple problème d'une déclaration anticipée.
Ainsi, cette simple ligne
membre=methrode1(methode2(methode3(methode4(), methode5())));
est, susceptible d'etre tout à fait valide si les types de retours correspondent aux type des arguments attendus par les différentes méthodes...
Mais il n'empeche que, meme avec des noms de méthodes "auto-commentée" (AKA dont on retrouve l'action effectuée dans le nom) la ligne présentera une difficulté de lecture bien suppérieure au code
1 2 3 4 5 6
|
type1 val=methode5();
type2 val2=methode4();
type3 val3=methode3(val2);
type4 val4=methode2(val3);
typefinal=methode1(val,val4); |
qui fournira pourtant un résutlat tout à fait identique, et pas forcément plus lent à l'exécution - avec, bien sur,les types et les noms de méthodes/variables cohérents.
Je sais qu'il n'est pas forcément courent d'avoir besoin de 5 ou de 6 fonctions pour déterminer la valeur d'un seul élément... mais, en C, par exemple, un code du genre de
1 2 3 4 5 6
|
FILE *fichin,*fichout;
if((fichin=fopen("monfich","r"))!=NULL && (fichout=fopen("fichcopy","w"))!=NULL)
{
//blabla
} |
est tout à fait valide... (si du moins, je n'ai pas fait d'erreur de parentheses, car je ne l'ai pas retesté avant de l'écrire
)
Il n'empeche que, la première fois que j'ai croisé cette syntaxe (j'étais débutant en C) j'ai eu un certain mal à comprendre le sens des tests et j'ai du recompter plusieurs fois le nombre de parentheses présentes pour etre sur de en pas en oublier...
Un code du genre de
1 2 3 4 5 6 7
|
FILE *fichin=fopen("monfich","r");
FILE *fichout=fopen("fichcopy","w");
if(fichin!=NULL && fichout!=NULL)
{
//blabla
} |
aurait eu le meme résultat, mais avec la lisibilité en plus..et le risque de mauvaise compréhension/d'erreur en moins...
Et pourtant, en nombre de touches de clavier enfoncées (espaces et touche <ENTER> inclus) il n'y a qu'une différence, si j'ai bien compté, de trois touches 
Ayant appris la dactylographie, et "tapant" plus ou moins 60 mots de 8 lettres à la minutes, le deuxième code m'aurait pris... moins d'une demi seconde en plus à écrire 
Crois tu réellement qu'en cas d'erreur dans le premier code (une simple parenthese mal placée ou oubliée, par exemple) j'aurais mis moins d'une demi seconde pour repérer et corriger l'erreur 
Et, faut il rappeler qu'une parenthese fermante est le genre d'erreur - avec la faute d'orthographe dans un nom de fonction ou de variable - le plus facile à situer, à repérer et à corriger parce qu'apparaissant dés la compilation...
Mets l'un de ces codes dans une fonction de 100 lignes, rajoute quelques déclarations anticipées de variables (sans les définir au départ) ou oublie de tester si la fin du fichier a été atteinte avant d'effectuer une lecture et... amuse toi à retrouver l'erreur à l'exécution
Partager