2010-02-07 6 views
2

ADans les boucles, est-ce important?

while(x < 100) { 
if(x == 1) { echo "Hello World!" } else { echo "Bottles" } 
x++; 
} 

B

while(x < 100) { 
if(x != 1) { echo "Bottles" } else { echo "Hello World!"} 
x++; 
} 

Ne serait-il vraiment faire une différence quand avoir une si grande boucle?

+0

Je ne vois pas de différence, il y aura 100 boucles et 1 vérification de condition pour chacune! – Kubi

+0

Je suppose que c'est un exemple simplifié, parce que clairement si c'était du vrai code, vous devriez déplacer le si en dehors de la boucle. Echo "Bonjour tout le monde", puis 99 bouteilles. –

Répondre

2

Cela ne fera probablement pas de différence.

je partirais avec le second, car il est plus souvent que x != 1 que ce sera que x == 1

Cela se traduit probablement des performances super-petits-1-millièmes-of-a-milliseconde augmentation, mais la micro-optimisation n'est pas si importante.

+4

Je voudrais aller avec le premier pour la lisibilité. Utiliser des conditions négatives peut être déroutant si vous en avez beaucoup. –

2

Il est peu probable que vous remarquiez une différence, et il y a presque certainement de plus gros goulots d'étranglement à s'inquiéter.

1

Sur les processeurs typiques, B serait probablement plus rapide car la prédiction de branchement sera probablement foirée pour A. En supposant que le compilateur n'optimise pas, bien sûr.

btw, l'avez-vous mesuré et trouvé que l'un est nettement meilleur que l'autre?

+0

Sauf que c'est php où la prédiction de branchement de l'unité centrale n'est pas un facteur. –

+0

Ceci est juste théorique. Vous ne pouvez jamais dire lequel sera le plus rapide à moins que nous le mesurions et même alors nous ne pouvons toujours pas être sûrs. Et, il est difficile de prédire ce que le prédicteur de branche ferait, de toute façon :-) –

0

Je suppose que x commence à 1. Si ce n'est pas le cas, cela ne sera pas nécessairement possible. Pourquoi s'embêter avec le conditionnel, vous savez que vous allez devoir le faire?

+0

Votre code affirme x est 1 au début. que dis-tu de ça? while (x <1) {echo "bouteilles"; x ++; } if (x ++ == 1) echo "Bonjour, monde!"; while (x <100) {echo "bouteilles"; x ++; } –

0

Cela dépend de ce que fera votre optimiseur avec votre boucle.