2009-11-10 3 views
1

Il est évident que l'utilisation de constantes nommées sur des nombres magiques a pour but de clarifier le code et de ne pas avoir à passer par des changements de code.Un cas où les constantes nommées ne sont pas nécessaires pour les nombres magiques

Cependant, que faites-vous si vous avez juste un nombre utilisé une seule fois dans une fonction? Supposons que vous ayez une fonction membre courte qui utilise la vélocité d'un objet (que nous dirons ne changera pas) pour calculer son mouvement, mais c'est la seule fonction qui utilise cette vélocité. Souhaitez-vous ...

A) donner à la classe une constante statique appelée à utiliser

B) Mettre une constante nommée dans la fonction

C) Utilisez le nombre magique, mais la commenter

D) Autre ...

Je suis en quelque sorte penché vers l'utilisation d'un nombre magique et je le commente si le numéro n'est utilisé qu'une seule fois, mais j'aimerais entendre les pensées des autres.

Éditer: Est-ce que mettre une constante nommée dans une fonction appelée plusieurs fois et lui assigner des implications de performance? Si tel est le Je suppose que la meilleure approche serait de mettre la constante dans un espace de noms ou en faire une variable de classe, etc.

Répondre

5

il suffit de déplacer vers le haut:

void do_something(void) 
{ 
    const float InitialVelocity = 5.0f; 

    something = InitialVelocity; 
    // etc. 
} 
+0

ce que cela a des conséquences sur les performances si vous êtes dans un environnement de haute performance? – Anonymous

+1

Non, à moins que votre compilateur ne soit complètement découragé. MSVC et GCC (avec -O3) traiteront simplement ce nombre comme une constante de compilation. – Crashworks

+0

Merci Crash. Très utile. – Anonymous

3

Disons que vous avez un court membre fonction qui utilise la vitesse

d'un objet Vous l'avez dit, la constante a un nom:

const type object_velocity = ....; 

Les nombres magiques sont mes ennemis :)

1

J'utiliserais au moins une constante nommée fonction-locale. Habituellement, j'utilise un espace de noms anonyme nommé constant pour rendre la valeur disponible dans le fichier source, en supposant que cela puisse être utile plus tard pour d'autres fonctions.

0

Utilisez les fonctions de refactoring Eclipses pour déplacer la constante dans une variable nommée de la méthode.

0

Utilisez-le comme une constante dans la fonction:

const int x = myMagicNumber; //Now document the magic. 
Questions connexes