Si tu remontes le fil et prends le temps de le lire, tu verras que je ne suis pas opposé aux gotos, bien au contraire, et notamment pour les raisons qu'expose Linus.
Et le mec disait en gros « Parfois il est plus utile d'utiliser un GOTO bien placé et bien optimisé que des imbrications de if et else qui rendent votre application illisible, non-optimisée, non-optimisable et donne des codes assembleurs de 15 km »
En même temps, moi je suis assez fan des « if » imbriqués, aussi. En fait, je trouve que l'essence même de la programmation structurée se trouve là-dedans : pouvoir identifier au niveau formel la route suivie par le code.
Je trouve ça beaucoup plus propre que de tout mettre à plat et de quitter la fonction avec un return (qui est un goto déguisé, quand il ne se trouve pas en fin de fonction) dès que quelque chose cloche. D'abord, parce que quand on élabore un processus complexe où chaque opération est dépendante de la première, il devient très difficile de déconstruire ce que l'on a fait dans les lignes précédentes si une condition vient à ne pas être remplie et qu'il faut avorter le processus, ensuite parce que la prochaine action ne peut être déterminée qu'en connaissant l'état de la machine au run-time.
À contrario, des « if » imbriqués ne sont pas si illisbles que çà, surtout s'ils sont proprement indentés : en choisissant par exemple une largeur de 4 caractères, on peut descendre jusqu'au dixième niveau d'imbrication − rarement atteint en pratique − sans dépasser la moitié de la zone d'édition sur un terminal ou une vieille imprimante matricielle en 80 colonnes. En travaillant sous X-Window avec un écran plat moderne au format 16:9, j'ai un terminal de 208 colonnes. Je peux en ouvrir deux cotes à cotes et avoir encore de la place dans chacun d'eux.
En outre, cela structure le code dès le niveau syntaxique : quoi qu'il se passe, tout ce qui est dépendant d'une condition se trouve à l'intérieur d'un bloc. Ça permet entre autre d'utiliser facilement les fonctions de repliement de son éditeur de texte préféré. On pourrait même imaginer combiner cette fonction de repliement à l'état du debugger si on pouvait garantir que tous les programmes sources étaient rédigés de cette façon.
Ça permet également de poser tout de suite les post-conditions : par exemple, si la première étape d'un long cheminement consiste à ouvrir un fichier, eh bien je teste la validité du handler dans mon if(), j'ouvre le bloc et je place tout de suite le close() à la fin. Ensuite, j'insère la suite de mon code entre le début du bloc et ce close(). De fait, je suis sûr de ne jamais l'oublier, que la suite du programme réussisse ou échoue. Ça permet de maintenir un programme sur de nombreuses années, y compris par plusieurs personnes différentes, qui n'ont pas besoin de savoir a priori que cela a été écrit auparavant. Dans le cas contraire, il faut mettre en place une procédure de sortie anticipée et penser à la remplir au fur et à mesure que le code évolue.
D'une part, la lisibilité est une notion très subjective. Ça peut être justifié mais, huit fois sur dix, quand on dit qu'un code n'est pas lisible, c'est que l'on manque d'argument. Un « ++x » ni plus ni moins lisible qu'un « x++ ». C'est un peu comme polémiquer pour savoir s'il faut mettre l'accolade ouvrante « {&nsbp;» à droite ou en dessous du nom de la fonction (je la mets en dessous).
Ensuite, écrire du code d'une certaine façon en tablant sur le fait que le compilateur va l'optimiser ensuite n'est pas une raison valable à elle seule d'adopter une manière d'écrire plutôt qu'une autre. D'abord parce que ce n'est pas garanti (dépend du compilateur) et qu'ensuite, ça ne sert à rien d'écrire d'une certaine manière si l'on veut que ce soit traduit de façon complètement différente.
D'ailleurs, j'ai une panne un peu chiante sur la mienne : le clavier ne fonctionne plus car il semble qu'un contacteur entre deux circuits imprimés se soit décollé. Je suis obligé d'appuyer avec le pouce sur la partie grise sous les touches de fonction pour pouvoir l'utiliser.
Il me semble que le boîtier de la HP48 est assemblé avec des rivets en plastique plutôt qu'avec des vis et qu'on ne peut donc pas l'ouvrir sans l'usiner.
Quelqu'un a-t-il déjà rencontré ce genre de problème ?
Moi, je m'en sers entre autre pour faire débuter le premier cycle d'une boucle while un peu plus loin que le début. Ça permet de gérer tous les cas de type « 1 + le reste » sans avoir à faire un test à chaque itération.
Cependant, le goto est tellement banni de nos jours qu'on ne peut même plus se permettre de l'utiliser dans des cas légitimes (les gens préférent presque voir une variable à la place). Je suis d'accord qu'il ne faut pas habituer les jeunes programmeurs à y recourir systématiquement mais là, plus personne ou presque ne sait aujourd'hui pourquoi cette instruction est tant proscrite.
À dire vrai, je milite pour la rédaction un guide du bon usage du goto et pour son enseignement « propre » dans les écoles. Pour certains, n'importe quelle horreur est préférable à un goto (par exemple des exit() au beau milieu d'une procédure).
Si tu veux gérer deux têtes de postes (consoles écran-clavier-souris) distinctes, tu peux le faire facilement en lançant deux serveurs X. Plusieurs structures dont des écoles le font déjà pour partager la même machine.
Avec X.org, tu dois pouvoir le faire facilement. Voici mon propre fichier de conf'
Ma souris USB est lue depuis /dev/input/mice et la section Screen gère les différents viewports. Avec tout cela, tu dois avoir suffisamment de lattitude pour gérer tes deux écrans en même temps.
Ça veut dire quoi « toujours rien », tu obtiens un message d'erreur ? L'application quitte silencieusement ? As-tu essayé avec plusieurs D.V.D. ? Peux-tu lire les D.V.D. non codés (comme ceux enregistrés par un graveur de salon) ? Donne des détails ...
Selon différentes sources, Michael Jackson aurait subit une crise cardiaque
SUBI !
Par pitié, ne mettez plus de t final aux participes passés du deuxième groupe. Ce sont les verbes du troisième qui en réclament. Et ce n'est pas parce que « dire », « lire » et « écrire » font partie des verbes les plus usités de la langue française qu'ils ont le droit de passer en seconde division. Na.
Moi je pense que, comme dans toutes les bonnes grosses boîtes bien corporatistes, il y a un service (prière d'éviter « département », merci) à que l'on a chargé de faire l'argumentaire du nouveau-produit-pas-encore-sorti.
C'est comme quand on tombe sur un mauvais sujet à l'examen de français et qu'on se retrouve obligé d'en rédiger l'explication alors que l'on ne croit pas un traitre mot de ce qu'il contient. 'faut bien creuser quand même et chercher ce qu'il y a de plus tiré par les cheveux si l'on veut avoir des points.
Moi, ce que j'en retiens surtout, c'est qu'Albanel a bien l'intention de renvoyer devant le parlement l'article incriminé. Donc, elle va nous pondre un truc aussi sournois mais constitution-compliant et la majorité va nous refaire le coup de l'obstruction pour que ce soit définitivement réglé. De toutes façons, ils l'ont dit eux-mêmes, ce n'est plus le texte qui est à débattre, la majorité étant persuadée d'être dans le vrai. L'important est de ne pas perdre.
En ce qui me concerne, le black out est toujours en vigueur. C'est le moment, pendant que l'affaire est médiatisée, de prendre la parole, de faire de la pé-da-go-gie (c) et de se faire entendre le plus possible d'ici à ce que l'article litigieux soit revoté. Ecrivez à Jack Lang, écrivez à Pierre Arditi et mobilisez vos députés tant que vous le pouvez.
[^] # Re: L'emprise de l'empire
Posté par Obsidian . En réponse au journal piratage de logiciels libres. Évalué à 6.
Rien à voir avec le problème du sac à dos, je suppose ! :-)
Allez hop ->[].
# Baptème ?
Posté par Obsidian . En réponse au journal Feuilles de style linufr. Évalué à 3.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 2.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 5.
En même temps, moi je suis assez fan des « if » imbriqués, aussi. En fait, je trouve que l'essence même de la programmation structurée se trouve là-dedans : pouvoir identifier au niveau formel la route suivie par le code.
Je trouve ça beaucoup plus propre que de tout mettre à plat et de quitter la fonction avec un return (qui est un goto déguisé, quand il ne se trouve pas en fin de fonction) dès que quelque chose cloche. D'abord, parce que quand on élabore un processus complexe où chaque opération est dépendante de la première, il devient très difficile de déconstruire ce que l'on a fait dans les lignes précédentes si une condition vient à ne pas être remplie et qu'il faut avorter le processus, ensuite parce que la prochaine action ne peut être déterminée qu'en connaissant l'état de la machine au run-time.
À contrario, des « if » imbriqués ne sont pas si illisbles que çà, surtout s'ils sont proprement indentés : en choisissant par exemple une largeur de 4 caractères, on peut descendre jusqu'au dixième niveau d'imbrication − rarement atteint en pratique − sans dépasser la moitié de la zone d'édition sur un terminal ou une vieille imprimante matricielle en 80 colonnes. En travaillant sous X-Window avec un écran plat moderne au format 16:9, j'ai un terminal de 208 colonnes. Je peux en ouvrir deux cotes à cotes et avoir encore de la place dans chacun d'eux.
En outre, cela structure le code dès le niveau syntaxique : quoi qu'il se passe, tout ce qui est dépendant d'une condition se trouve à l'intérieur d'un bloc. Ça permet entre autre d'utiliser facilement les fonctions de repliement de son éditeur de texte préféré. On pourrait même imaginer combiner cette fonction de repliement à l'état du debugger si on pouvait garantir que tous les programmes sources étaient rédigés de cette façon.
Ça permet également de poser tout de suite les post-conditions : par exemple, si la première étape d'un long cheminement consiste à ouvrir un fichier, eh bien je teste la validité du handler dans mon if(), j'ouvre le bloc et je place tout de suite le close() à la fin. Ensuite, j'insère la suite de mon code entre le début du bloc et ce close(). De fait, je suis sûr de ne jamais l'oublier, que la suite du programme réussisse ou échoue. Ça permet de maintenir un programme sur de nombreuses années, y compris par plusieurs personnes différentes, qui n'ont pas besoin de savoir a priori que cela a été écrit auparavant. Dans le cas contraire, il faut mettre en place une procédure de sortie anticipée et penser à la remplir au fur et à mesure que le code évolue.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 6.
D'une part, la lisibilité est une notion très subjective. Ça peut être justifié mais, huit fois sur dix, quand on dit qu'un code n'est pas lisible, c'est que l'on manque d'argument. Un « ++x » ni plus ni moins lisible qu'un « x++ ». C'est un peu comme polémiquer pour savoir s'il faut mettre l'accolade ouvrante « {&nsbp;» à droite ou en dessous du nom de la fonction (je la mets en dessous).
Ensuite, écrire du code d'une certaine façon en tablant sur le fait que le compilateur va l'optimiser ensuite n'est pas une raison valable à elle seule d'adopter une manière d'écrire plutôt qu'une autre. D'abord parce que ce n'est pas garanti (dépend du compilateur) et qu'ensuite, ça ne sert à rien d'écrire d'une certaine manière si l'on veut que ce soit traduit de façon complètement différente.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 3.
10 PRINT "ça fait chier les cons":GOTO 10
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 3.
Par contre, je suis assez fan des pré-incrémentations, aussi. Peux-tu nous expliquer pourquoi elles sont proscrites par chez toi ?
# Pigeon Drop
Posté par Obsidian . En réponse au journal Où il est question d'Euratechnologies. Évalué à 10.
C'est juste un packet loss selon la RFC 1149. Ça prouve que tous les protocoles sont pris en charge. C'est plutôt une bonne chose, non ?
[^] # Re: trouvé :)
Posté par Obsidian . En réponse au message HP48 : sommer la pile. Évalué à 2.
D'ailleurs, j'ai une panne un peu chiante sur la mienne : le clavier ne fonctionne plus car il semble qu'un contacteur entre deux circuits imprimés se soit décollé. Je suis obligé d'appuyer avec le pouce sur la partie grise sous les touches de fonction pour pouvoir l'utiliser.
Il me semble que le boîtier de la HP48 est assemblé avec des rivets en plastique plutôt qu'avec des vis et qu'on ne peut donc pas l'ouvrir sans l'usiner.
Quelqu'un a-t-il déjà rencontré ce genre de problème ?
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 5.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 10.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 3.
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 4.
int x,y;
x=1;
y=5;
goto entree:
do
{
printf ("-");
entree:
printf ("%d",x);
}
while (x<5);
1-2-3-4-5
[^] # Re: GOTO : Nostalgie...
Posté par Obsidian . En réponse au journal Sortie de PHP 5.3. Évalué à 3.
Cependant, le goto est tellement banni de nos jours qu'on ne peut même plus se permettre de l'utiliser dans des cas légitimes (les gens préférent presque voir une variable à la place). Je suis d'accord qu'il ne faut pas habituer les jeunes programmeurs à y recourir systématiquement mais là, plus personne ou presque ne sait aujourd'hui pourquoi cette instruction est tant proscrite.
À dire vrai, je milite pour la rédaction un guide du bon usage du goto et pour son enseignement « propre » dans les écoles. Pour certains, n'importe quelle horreur est préférable à un goto (par exemple des exit() au beau milieu d'une procédure).
# Xorg
Posté par Obsidian . En réponse au message Xwindow pour gerer deux ecrans. Évalué à 2.
Avec X.org, tu dois pouvoir le faire facilement. Voici mon propre fichier de conf'
# Xorg configuration created by pyxf86config
Section "ServerLayout"
Identifier "Default Layout"
Screen 0 "Screen0" 0 0
InputDevice "Mouse0" "CorePointer"
InputDevice "Keyboard0" "CoreKeyboard"
EndSection
Section "InputDevice"
# generated from default
Identifier "Mouse0"
Driver "mouse"
Option "Protocol" "auto"
Option "Device" "/dev/input/mice"
Option "Emulate3Buttons" "no"
Option "ZAxisMapping" "4 5"
EndSection
Section "InputDevice"
# keyboard added by rhpxl
Identifier "Keyboard0"
Driver "kbd"
Option "XkbModel" "pc105"
Option "XkbLayout" "fr"
Option "XkbVariant" "latin9"
EndSection
Section "Monitor"
Identifier "Monitor0"
VendorName "Unknown"
ModelName "Unknown"
HorizSync 30.0 - 110.0
VertRefresh 50.0 - 150.0
Option "DPMS"
EndSection
Section "Device"
Identifier "Videocard0"
Driver "nvidia"
EndSection
Section "Screen"
Identifier "Screen0"
Device "Videocard0"
Monitor "Monitor0"
DefaultDepth 24
SubSection "Display"
Viewport 0 0
Depth 24
EndSubSection
EndSection
Ma souris USB est lue depuis /dev/input/mice et la section Screen gère les différents viewports. Avec tout cela, tu dois avoir suffisamment de lattitude pour gérer tes deux écrans en même temps.
[^] # Re: Renouvellement, tout simplement.
Posté par Obsidian . En réponse au message Certificat, https, etc. Évalué à 3.
Reste à savoir si c'est vraiment nécessaire, à part pour le mot de passe ...
[^] # Re: libdvdcss
Posté par Obsidian . En réponse au message lire un dvd video. Évalué à 3.
# B.d.R.
Posté par Obsidian . En réponse au journal He's bad.... Évalué à 9.
SUBI !
Par pitié, ne mettez plus de t final aux participes passés du deuxième groupe. Ce sont les verbes du troisième qui en réclament. Et ce n'est pas parce que « dire », « lire » et « écrire » font partie des verbes les plus usités de la langue française qu'ils ont le droit de passer en seconde division. Na.
[^] # Re: -and -not -name .\*
Posté par Obsidian . En réponse au message ignrorer des répertoire avec find ?. Évalué à 0.
[^] # Re: Résultat d'un concours?
Posté par Obsidian . En réponse au journal Get The Facts : le retour. Évalué à 4.
C'est comme quand on tombe sur un mauvais sujet à l'examen de français et qu'on se retrouve obligé d'en rédiger l'explication alors que l'on ne croit pas un traitre mot de ce qu'il contient. 'faut bien creuser quand même et chercher ce qu'il y a de plus tiré par les cheveux si l'on veut avoir des points.
[^] # Re: Profitez-en avant qu'il n'y en ait plus !
Posté par Obsidian . En réponse au journal Hadopi : le prestataire pour la partie applicative a été selectionné. Évalué à 10.
Bah là, on peut dire que tu l'as eu, cette année :-)
[^] # Re: vendredi
Posté par Obsidian . En réponse à la dépêche La République Populaire de Chine impose un logiciel de contrôle d'accès défaillant. Évalué à 5.
Sous OpenOffice, c'est Ctrl-Q.
# Verdict
Posté par Obsidian . En réponse au journal Historique, je te vois !. Évalué à 7.
http://google.fr/
http://viedemerde.fr/
http://thedailywtf.com/
Ou comment se retrouver brutalement face à soi-même ! :-) Y a de quoi faire peur, anéfé ...
# QCad ?
Posté par Obsidian . En réponse au message Logiciel PAO/DAO matériaux souples. Évalué à 2.
QCad ne suffirait-il pas ?
http://www.ribbonsoft.com/qcad.html
# Albanel contre-attaque
Posté par Obsidian . En réponse à la dépêche Le Conseil Constitutionnel français censure la loi HADOPI. Évalué à 8.
En ce qui me concerne, le black out est toujours en vigueur. C'est le moment, pendant que l'affaire est médiatisée, de prendre la parole, de faire de la pé-da-go-gie (c) et de se faire entendre le plus possible d'ici à ce que l'article litigieux soit revoté. Ecrivez à Jack Lang, écrivez à Pierre Arditi et mobilisez vos députés tant que vous le pouvez.