Sans vouloir entrer dans la polémique, j'ai toujours cru (cfr camel book) que for et foreach étaient synonymes.Envoyé par Woufeil
Sans vouloir entrer dans la polémique, j'ai toujours cru (cfr camel book) que for et foreach étaient synonymes.Envoyé par Woufeil
Bah je pense pas non, la syntaxe est totalement différente et on peut pas utiliser un foreach à la place d'un for dans tous les cas (mais un for peut toujours remplacer un foreach il me semble).
Je pense que si elle a été créée, c'est que la seconde boucle doit être plus optimisée que la première...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 #Boucle pour utiliser chaque élément d'un tableau avec for for (my $i=0;$i<$#tab;$i++) {#faire quelque chose avec $tab[$i] } #La même avec foreach foreach my $elem (@tab) {#faire quelque chose avec $elem }
D'ailleurs la documentation de Sylvain Lhuillier dit ceci :
Enfin, c'est mon avis en tout casCette instruction permet de parcourir une liste. Son implémentation optimisée dans l'interpréteur Perl rend son usage bien plus efficace qu'un parcours qui utiliserait une variable indicielle incrémentée à chaque tour d'une boucle for.![]()
Bonsoir.
Je pense comme mhooreman que for et foreach sont rigoureusement synonymes.
Voyez cet exemple :
La première boucle (foreach), qui utilise un indiçage numérique, mérite les mêmes critiques qu'un for qui utiliserait lui aussi cet indiçage.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 #!/usr/bin/perl -w use utf8; use Tk; use warnings; use strict; my $mw = MainWindow->new; my @tableau = (10, 20, 30); my $somme = 0; foreach (my $i = 0; $i <= 2; ++$i) # Ceci montre qu'on peut mettre foreach là où on peut mettre for. { $somme += $tableau[$i]; } $mw->messageBox(-message => $somme,); $somme = 0; for my $element (@tableau) # Ceci montre qu'on peut mettre for là où on peut mettre foreach. { $somme += $element; } $mw->messageBox(-message => $somme,);
La second boucle (for), qui n'utilise pas d'indiçage numérique, mérite les mêmes éloges qu'un foreach qui n'en utiliserait pas non plus.
Après relecture du Camel Book, il me sembe que c'est effectivement le cas. Ca m'étonne beaucoup que Sylvain Lhuillier se soit trompé, mais cela semble être le cas...
Je ne sais pas si Sylvain Lhuillier s'est trompé : il n'en a pas à for ou à foreach, il critique l'indiçage numérique, et l'indiçage numérique est aussi critiquable avec foreach qu'avec for, je crois.Envoyé par Woufeil
Bonsoir,
Un bon départ pour l'optimisation des scripts Perl c'est de lire et d'appliquer ce qu'on trouve dans
Programmation en Perl, Editions O'Reilly le chapitre 24 - Techniques couramment employées - Efficacité
lami20j
Partager