2010-04-12 7 views
2

Y at-il une manière élégante en Java au code:façon élégante de code si (10 <x <20)

if (10 < x < 20) { 
    ... 
} 

-à-dire "si x est compris entre 10 et 20"

plutôt que d'avoir à écrire

if ((x > 10) && (x < 20)) { 
    ... 
} 

Merci!

+7

'if (10 kennytm

+3

'if (Math.abs (x-15) <5) {' (Je veux dire, les débordements d'entiers ne comptent pas.) –

Répondre

14

Non. L'opérateur < compare toujours deux éléments et génère une valeur booléenne. Vous ne pouvez donc pas les chaîner de manière "élégante". Vous pouvez le faire cependant:

if (10 < x && x < 20) 
{ 
    ... 
} 
+0

C'est beaucoup d'IMO élégant - il n'y a tout simplement pas de notation en sténographie/sucre. –

5

Kenny l'a cloué dans les commentaires.

if (10 < x && x < 20) 

Vous souhaitez les conserver à la fois inférieures ou supérieures à; inverser la direction de la comparaison rend la logique confuse lorsque vous essayez de lire rapidement.

+0

Vif observation au fond. Gardez une base de code cohérente. – jcolebrand

5

Non, mais vous pouvez réarranger pour faire mieux, ou écrire un wrapper si elle vous agace:

if (InRange(x, 10, 20)) { ... } 

Ou, comme Carl dit:

if (new Range(10, 20).contains(x)) { ... } 

Bien que personnellement, je ne vois pas le point. C'est une abstraction inutile. La déclaration booléenne nue est parfaitement évidente. Cependant, maintenant que j'y pense, et à la lumière du commentaire de Carl ci-dessous, il y a des moments où une Range est une abstraction parfaitement valide et utile (par exemple quand il s'agit de Feeds). Donc, en fonction de la sémantique de x, peut-être que vous voulez une abstraction.

+3

ou 'nouvelle plage (10, 20) .contains (x)'. –

+0

@Carl Manaster: Oui, ce serait la façon de le faire. Bon appel. –

+1

Oui, bien sûr, instancions un nouvel objet plutôt que de soumettre notre beau code à une expression '&&'. – mob

1

La seule chose que vous pouvez faire est lâche la parenthèse supplémentaire puisque le && a une priorité inférieure à > et <:

if (x > 10 && x < 20) { 
    ... 
} 

Autre que cela: il n'y a aucun moyen plus court.

4
if(x < 20) 
    { 
    if(x > 10) 
    { 

    //... 

    } 
    } 

OU

if(x > 10) 
    { 
    if(x < 20) 
    { 

    //... 

    } 
    } 
+1

+1 drôle, vous gagnez un internets, vous pouvez le ramasser sur votre chemin à la porte ... – jcolebrand

0

La voie rapide est un interrupteur.


EDIT:

switch(x) { 
    case 10: 
    case 11: 
    case 12: 
    case 13: 
    ... 
    case 19: System.out.println("yes"); 
} 

est compilé dans une table de saut, pas une longue série de ifs.

+0

Je pense que vous avez besoin d'expliquer ce que vous vouliez dire un peu plus complet – Will

+0

-1 La question était sur une * façon élégante * . – whiskeysierra

Questions connexes