2010-08-26 19 views
1

J'ai joué avec ce morceau de code pendant plus d'une heure en essayant de le réorganiser différemment. Y a-t-il un moyen plus simple de l'écrire?refactor mon if code de déclaration

if x is not Number  ;// if x is string 
    { 
     if y is not Number  ;// x, y both strings 
     { 
     Eval(x) 
     Eval(y) 
     return 
     } 
     else     ;// x is string, y is Number 
     { 
     Eval(x) 
     Scale(y) 
     return 
     } 
    } 
    else if y is not Number ;// x is Number, y is string 
    { 
     Scale(x) 
     Eval(y) 
     return 
    } 
    else      ;// both are numbers 
    { 
     Scale(x) 
     Scale(y) 
     return 
    } 

Répondre

7

Il semble que vous voulez Eval cordes et Scale numéros. Au lieu d'avoir quatre cas explicites (qui deviendrait huit avec trois variables), traiter chaque cas pour x et y indépendamment:

if x is Number 
    Scale(x) 
else 
    Eval(x) 

if y is Number 
    Scale(y) 
else 
    Eval(y) 

Ou, mieux encore, vous pouvez pousser Eval/Scale dans une méthode utilitaire:

ScaleOrEval(z): 
    if z is Number 
     Scale(z) 
    else 
     Eval(z) 

... puis l'utiliser ...

ScaleOrEval(x) 
ScaleOrEval(y) 

Si vous choisissez les bons noms de méthode, puis La création d'une méthode utilitaire rend le code plus lisible et vous aide à éviter la répétition de copier-coller.

+0

2 secondes plus vite ... –

+1

Merci, je pensais que c'était ma fonction utilitaire, appelée GetScaledButtonCoord. Je vais seulement avoir deux vars x, y, mais peut-être que je devrais séparer cela plus loin .. – mikew

2
// First handle x 
if x is Number 
{ 
    Scale(x) 
} 
else 
{ 
    Eval(x) 
} 

// Then handle y 
if y is Number 
{ 
    Scale(y) 
} 
else 
{ 
    Eval(y) 
} 

return