2010-09-29 14 views
2

Voici deux façons d'appeler callscript (en pseudocode):Comment dois-je formater ce morceau de code?

utilisant double appelle

if flag == true 
    flag = false 
    callscript 
    flag = true 
else 
    callscript 
endif 

en utilisant une variable supplémentaire

flag2 = flag 
flag = false 
callscript 
flag = flag2 

conditions

  • Je dois vous assurer est que flag est false lorsque le script est appelé. La valeur flag doit également être restaurée à la valeur d'origine.

Existe-t-il une meilleure façon de faire cela que ces deux-là? Si non, lequel de ces choix est le meilleur?

Répondre

5

Le mieux serait d'envoyer le drapeau le long de l'appel, de sorte que la relation entre le drapeau et la méthode est claire:

callscript(false) 

Si ce n'est pas une option, et vous devez choisir entre les deux, alors l'un ferait l'affaire. Il n'y a pas de gagnant clair, la lisibilité est à peu près la même pour les deux, donc c'est juste une question de goût.

La deuxième option serait la meilleure si l'appel réel est compliqué de sorte que vous ne voulez pas le répéter dans le code, ou si le type de données est quelque chose de plus compliqué qu'un booléen.

1

J'aime le second beaucoup mieux, parce que si vous le nom flag2 d'une manière sensible (comme

backupValueOfFlag = flag 
flag = false 
callscript 
flag = backupValueOfFlag 

), il est beaucoup plus clair ce que vous faites et pourquoi vous le faites.

0

Je pense que c'est la raison pour laquelle des variables locales et des paramètres de sous-programmes ont été inventés.

Avez-vous vraiment besoin de travailler avec des globals?

+0

Avez-vous vraiment besoin de travailler avec des globals? - oui, dans ce cas. – Lazer

0

Je choisirai le second. Le premier est trop artificiel pour moi - le if il n'y a pas de flux de programme mais pour préserver la valeur du drapeau.

0

Pour moi, un meilleur choix est le premier. Parce que c'est plus lisible et plus clair ce qui se passe là-bas.

4

Je voudrais aller avec la variante deux avec un changement au nom des variables pour le rendre un peu plus facile à comprendre.

saved_flag = flag 
flag = false 
callscript 
flag = saved_flag