Des fois je pense que j'aurais dû porter une meilleure attention à mes cours de français, spécialement comment écrire clairement un argument, j'ai pas l'impression que je me fais bien comprendre. Je vais y aller en bullet points, voir ce que ça donne.
- Dire qu'il faut jamais utiliser goto, dans aucun cas, n'est pas un bon conseil;
- Utiliser goto à tort et à travers est une très mauvaise idée;
- Lorsque faire une opération en respectant le paradigme de programmation structurée rend le programme/fonction plus complexe que nécessaire (exemple, sortir de trois boucles imbriquées), l'utilisation de goto peut être justifiée.
Des langages plus récents tels que le Perl ou le PHP offrent une façon de dire à break (last dans le cas de Perl) combien de boucles imbriquées break doit nous faire sortir, d'autres langages tels le Python utiliserait une exception pour facilement sortir des trois boucles. Voyons des exemples très simples:
Comment faire en C?Code:
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 # Perl FIRST: for my $i (1..100) { for my $j (1..100) { for my $k (1..100) { if ($i == 6 && $j == 6 && $k == 6) { print "Le Diable! Fuyons!\n"; last FIRST; } } } } # PHP for ($i = 1; $i <= 100; $i++) { for ($j = 1; $j <= 100; $j++) { for ($k = 1; $k <= 100; $k++) { if ($i == 6 && $j == 6 && $k == 6) { echo "Le Diable! Fuyons!\n"; break 3; } } } # Python try: for i in xrange(1, 101): for j in xrange(1, 101): for k in xrange(1, 101): if i == j == k == 6: print "Le Diable! Fuyons!" raise DevilError except DevilError: pass
C'est peut-être seulement moi, mais je trouve le code avec le goto plus lisible.Code:
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 /* Sans goto */ int i, j, k; int devil = 0; for (i = 1; i <= 100; i++) { for (j = 1; j <= 100; j++) { for (k = 1; k <= 100; k++) { if (i == 6 && j == 6 && k == 6) { printf("Le Diable! Fuyons!\n"); devil = 1; break; } } if (devil) break; } if (devil) break; } /* Avec goto */ int i, j, k; for (i = 1; i <= 100; i++) { for (j = 1; j <= 100; j++) { for (k = 1; k <= 100; k++) { if (i == 6 && j == 6 && k == 6) { printf("Le Diable! Fuyons!\n"); goto DEVIL; } } } } DEVIL:
J'espère ne pas vous avoir trop ennuyé et j'espère que vous comprenez mon point de vue.