Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Nicolas George
"Stéphane Müller" wrote in message <fa43k2$3n1$:
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Pour moi, le second, très clairement, sauf si la dernière valeur prise est utile après la fin de la boucle. Sinon, ça laisse une variable déclarée dont la valeur n'est pas pertinente, c'est un risque de bug.
Il y a-t-il un problème (performance, utilisation mémoire, etc..) ormis l'aspect "portée" à déclarer $var à chaque itération ?
Si la performance est critique, il faut essayer, évidemment.
"Stéphane Müller" wrote in message <fa43k2$3n1$1@shakotay.alphanet.ch>:
Je me posais une petite question. Vaut-il mieux écrire:
my $var;
foreach ( 1..100 ) {
$var = ...
}
ou
foreach ( 1..100 ) {
my $var = ...
}
Pour moi, le second, très clairement, sauf si la dernière valeur prise est
utile après la fin de la boucle. Sinon, ça laisse une variable déclarée dont
la valeur n'est pas pertinente, c'est un risque de bug.
Il y a-t-il un problème (performance, utilisation mémoire,
etc..) ormis l'aspect "portée" à déclarer $var à chaque
itération ?
Si la performance est critique, il faut essayer, évidemment.
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Pour moi, le second, très clairement, sauf si la dernière valeur prise est utile après la fin de la boucle. Sinon, ça laisse une variable déclarée dont la valeur n'est pas pertinente, c'est un risque de bug.
Il y a-t-il un problème (performance, utilisation mémoire, etc..) ormis l'aspect "portée" à déclarer $var à chaque itération ?
Si la performance est critique, il faut essayer, évidemment.
Jean-Baptiste Mazon
"Stéphane Müller" writes:
Bonjour,
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Il y a-t-il un problème (performance, utilisation mémoire, etc..) hormis l'aspect "portée" à déclarer $var à chaque itération ?
"La" bonne manière n'existe pas! ;-) Ceci dit, on peut débattre des différences entre les deux.
Au premier abord, la première est plus efficace: elle n'alloue la variable qu'une fois pour toutes, alors que la seconde la crée/libère à chaque itération. L'empreinte mémoire de l'ensemble est similaire sur la durée de l'itération. (à supposer, bien sûr, qu'aucune référence à la variable ne soir conservée et gardée, mais le fait que le dilemme se pose me conforte dans cette hypothèse)
D'un point de vue de prévision de la maintenance, j'aurais tendance à réduire la portée des variables autant que possible. Mais si le temps d'exécution devient un problème, il y a effectivement un peu à gratter par là. Si peu que c'en est rarement justifié.
Je me posais une petite question. Vaut-il mieux écrire:
my $var;
foreach ( 1..100 ) {
$var = ...
}
ou
foreach ( 1..100 ) {
my $var = ...
}
Il y a-t-il un problème (performance, utilisation mémoire,
etc..) hormis l'aspect "portée" à déclarer $var à chaque
itération ?
"La" bonne manière n'existe pas! ;-) Ceci dit, on peut débattre des
différences entre les deux.
Au premier abord, la première est plus efficace: elle n'alloue la
variable qu'une fois pour toutes, alors que la seconde la crée/libère
à chaque itération. L'empreinte mémoire de l'ensemble est similaire
sur la durée de l'itération. (à supposer, bien sûr, qu'aucune
référence à la variable ne soir conservée et gardée, mais le fait que
le dilemme se pose me conforte dans cette hypothèse)
D'un point de vue de prévision de la maintenance, j'aurais tendance à
réduire la portée des variables autant que possible. Mais si le temps
d'exécution devient un problème, il y a effectivement un peu à gratter
par là. Si peu que c'en est rarement justifié.
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Il y a-t-il un problème (performance, utilisation mémoire, etc..) hormis l'aspect "portée" à déclarer $var à chaque itération ?
"La" bonne manière n'existe pas! ;-) Ceci dit, on peut débattre des différences entre les deux.
Au premier abord, la première est plus efficace: elle n'alloue la variable qu'une fois pour toutes, alors que la seconde la crée/libère à chaque itération. L'empreinte mémoire de l'ensemble est similaire sur la durée de l'itération. (à supposer, bien sûr, qu'aucune référence à la variable ne soir conservée et gardée, mais le fait que le dilemme se pose me conforte dans cette hypothèse)
D'un point de vue de prévision de la maintenance, j'aurais tendance à réduire la portée des variables autant que possible. Mais si le temps d'exécution devient un problème, il y a effectivement un peu à gratter par là. Si peu que c'en est rarement justifié.
Denis Joiret
Stéphane Müller wrote:
Bonjour,
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Il y a-t-il un problème (performance, utilisation mémoire, etc..) ormis l'aspect "portée" à déclarer $var à chaque itération ?
Bonjour,
Le second semble un peu plus lent au vu de quelques exécutions :
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41 secondes.
Ceci dit, si la boucle s'éxécute seulement 100 fois (comme mis dans les codes plus haut), les deux sont strictement équivalents, il a fallu que je mette un nombre de boucles très importants pour arriver à mettre un peu en évidence une différence notable de temps d'exécution. Et dans ce cas, le contenu de la boucle lui même dictera le temps global d'exécution, si on veut optimiser, il faudra alors scruter chaque ligne du code dans la boucle.
Sinon, pour éviter le problème de porté de la variable, il suffit d'entourer la boucle dans une construction { } qui est équivalente à une boucle exécutée une seule fois.
{ my $var; foreach (1 .. 100) { $var = ... } }
ainsi, la variable disparait une fois la boucle terminée.
Denis
Stéphane Müller wrote:
Bonjour,
Je me posais une petite question. Vaut-il mieux écrire:
my $var;
foreach ( 1..100 ) {
$var = ...
}
ou
foreach ( 1..100 ) {
my $var = ...
}
Il y a-t-il un problème (performance, utilisation mémoire,
etc..) ormis l'aspect "portée" à déclarer $var à chaque
itération ?
Bonjour,
Le second semble un peu plus lent au vu de quelques exécutions :
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41 secondes.
Ceci dit, si la boucle s'éxécute seulement 100 fois (comme mis dans les codes
plus haut), les deux sont strictement équivalents, il a fallu que je mette un
nombre de boucles très importants pour arriver à mettre un peu en évidence une
différence notable de temps d'exécution. Et dans ce cas, le contenu de la
boucle lui même dictera le temps global d'exécution, si on veut optimiser, il
faudra alors scruter chaque ligne du code dans la boucle.
Sinon, pour éviter le problème de porté de la variable, il suffit d'entourer
la boucle dans une construction { } qui est équivalente à une boucle exécutée
une seule fois.
{
my $var;
foreach (1 .. 100) {
$var = ...
}
}
ainsi, la variable disparait une fois la boucle terminée.
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41 secondes.
Ceci dit, si la boucle s'éxécute seulement 100 fois (comme mis dans les codes plus haut), les deux sont strictement équivalents, il a fallu que je mette un nombre de boucles très importants pour arriver à mettre un peu en évidence une différence notable de temps d'exécution. Et dans ce cas, le contenu de la boucle lui même dictera le temps global d'exécution, si on veut optimiser, il faudra alors scruter chaque ligne du code dans la boucle.
Sinon, pour éviter le problème de porté de la variable, il suffit d'entourer la boucle dans une construction { } qui est équivalente à une boucle exécutée une seule fois.
{ my $var; foreach (1 .. 100) { $var = ... } }
ainsi, la variable disparait une fois la boucle terminée.
Denis
espie
In article , Denis Joiret wrote:
Stéphane Müller wrote:
Bonjour,
Je me posais une petite question. Vaut-il mieux écrire:
my $var; foreach ( 1..100 ) { $var = ... }
ou
foreach ( 1..100 ) { my $var = ... }
Il y a-t-il un problème (performance, utilisation mémoire, etc..) ormis l'aspect "portée" à déclarer $var à chaque itération ?
Bonjour,
Le second semble un peu plus lent au vu de quelques exécutions :
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41 secondes.
Tu omets de dire quelle version de perl tu utilises...
Personnellement, je ne me fatigue jamais a faire ce genre de chose avant d'avoir passe un profiler quelconque sur mon code, si celui-ci s'avere un peu lent.
(entre Devel::DProf, Devel::FastProf, Devel::SmallProf, et Devel::Size il n'y a que l'embarras du choix...)
De toutes facons, qui nous dit que la prochaine version de perl ne va pas optimiser ce genre de choses ? ca parait du domaine du fort raisonnable.
In article <46C5BC02.7050307@inria.fr>,
Denis Joiret <Denis.Joiret@inria.fr> wrote:
Stéphane Müller wrote:
Bonjour,
Je me posais une petite question. Vaut-il mieux écrire:
my $var;
foreach ( 1..100 ) {
$var = ...
}
ou
foreach ( 1..100 ) {
my $var = ...
}
Il y a-t-il un problème (performance, utilisation mémoire,
etc..) ormis l'aspect "portée" à déclarer $var à chaque
itération ?
Bonjour,
Le second semble un peu plus lent au vu de quelques exécutions :
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41
secondes.
Tu omets de dire quelle version de perl tu utilises...
Personnellement, je ne me fatigue jamais a faire ce genre de chose
avant d'avoir passe un profiler quelconque sur mon code, si celui-ci
s'avere un peu lent.
(entre Devel::DProf, Devel::FastProf, Devel::SmallProf, et Devel::Size
il n'y a que l'embarras du choix...)
De toutes facons, qui nous dit que la prochaine version de perl ne va
pas optimiser ce genre de choses ? ca parait du domaine du fort
raisonnable.
En moyenne, le premier s'exécute en 3.42 secondes, et le second en 4.41 secondes.
Tu omets de dire quelle version de perl tu utilises...
Personnellement, je ne me fatigue jamais a faire ce genre de chose avant d'avoir passe un profiler quelconque sur mon code, si celui-ci s'avere un peu lent.
(entre Devel::DProf, Devel::FastProf, Devel::SmallProf, et Devel::Size il n'y a que l'embarras du choix...)
De toutes facons, qui nous dit que la prochaine version de perl ne va pas optimiser ce genre de choses ? ca parait du domaine du fort raisonnable.