Envoyé par
JIVARO
"Simplicité et concision dans l'écriture ne s'acquièrent pas du jour au lendemain."
Et ne vont pas toujours de pair avec la lisibilité. J'insiste : xfanx a loupé ta sortie, et moi aussi au début. Sur 3 lecteurs, 2 n'ont pas compris tout de suite(et un pas du tout) la subtilité de ton programme.
Envoyé par
JIVARO
Pour el_slapper :
J'ai "ressorti" cette moulinette générique des milliers de fois sans problèmes.
Je n'ai jamais pris d'aspro pour l'adapter, il suffit d'insérer son traitement entre le end-read et le write.
Ce programme n'est pas plus sale qu'un programme truffé de variables inutiles.
"il suffit de", à condition de le savoir. Tu connais ta moulinette par coeur, tu ne te tromperas pas. Le jour ou un débutant arrive(genre la posteuse originale, qui ne doit plus être débutante depuis), tu lui dis "récupère ça", et il/elle va galérer parcequ'il/elle aura loupé plein de détails.
Ma "variable inutile" prend peut-être 5 lignes, mais elle saute à la gueule. Et comme quelqu'un qui lit le programme ne lit jamais la working en même temps, il n'en aura que 2 en plus à lire :
SET W-LECTURE-EN-COURS TO TRUE
et
SET W-LECTURE-TERMINEE TO TRUE
. Tout ça pour avoir une vraie programmation structurée, et pas un STOP RUN au milieu de nulle part. Qui va sans doute provoquer un warning à la compilation.
Envoyé par
JIVARO
Pour Luc Orient :
Le programme n'est pas plus court.
Il utilise l'infâme GOTO, l'ennemi des programmes "structurés".
Il oublie de fermer les fichiers.
ça fait deux ans environ que je n'ai pas codé un GO TO, pour autant, je ne me l'interdit pas. Dans certaines circonstances, ça peut éviter des IF ou des EVALUATE aux conditions particulièrement tordues et à l'imbrication illisible. Dans ce cas, j'écarte tous les cas non passants par un Et ensuite, je traite les cas passants, avec des conditions déjà exotiques et des imbrications déjà complexes. Mais j'évite d'avoir 50 paragraphes(mêmes structurés, si on en fait trop, ça devient illisible aussi), et je garde un code lisible. Bon, ici, je n'ai pas de fonctionnel nécéssitant delà, donc pas un GO TO.
Evidemment, quand on commence à sortir des horreurs du genre :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
| 01 A1-FG PIC X VALUE SPACE.
01 B1-FG PIC X VALUE SPACE.
01 C1-FG PIC X VALUE SPACE.
PERFORM A
IF A1-FG EQUAL TO "Y"
DISPLAY "DO"
GO TO G6
END-IF
.
G1.
PERFORM B
IF B1-FG EQUAL TO "Y"
DISPLAY "DOO"
GO TO G5
END-IF
.
G2.
PERFORM C
IF C1-FG EQUAL TO "Y"
DISPLAY "IN DEEP"
GO TO G4
END-IF
.
G3.
GO TO C5
.
G4.
GO TO B5
.
G5.
GO TO A5
.
G6.
MOVE +11 TO RETURN-CODE
STOP RUN
A SECTION.
GO TO G1
.
A5.
MOVE "Y" TO A1-FG
.
A9.
EXIT.
B SECTION.
GO TO G2
.
B5.
MOVE "Y" TO B1-FG
.
B9.
EXIT.
C SECTION.
GO TO G3
.
C5.
MOVE "Y" TO C1-FG
.
C9.
EXIT.
. |
le GO TO devient tout de suite moins séduisant(euphémisme). Mais c'est un outil dans la boite, il faut en connaitre les dangers(massifs, cf mon exemple), mais je trouve dommage de se l'interdire, pour des cas spécifiques ou il est vraiment utile.
Partager