Элегантный способ кодирования if (10 <x <20) - PullRequest
2 голосов
/ 12 апреля 2010

Есть ли в Java элегантный способ кодирования:

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

т.е. «если х от 10 до 20»

вместо того, чтобы писать

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

Спасибо!

Ответы [ 6 ]

14 голосов
/ 12 апреля 2010

Нет. Оператор < всегда сравнивает два элемента и приводит к логическому значению, поэтому вы не можете связать их «элегантно». Вы можете сделать это, хотя:

if (10 < x && x < 20)
{
    ...
}
5 голосов
/ 12 апреля 2010

Нет, но вы можете перестроить его, чтобы сделать его лучше, или написать обертку, если она вас раздражает:

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

Или, как говорит Карл:

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

Хотя лично я не вижу смысла. Это бесполезная абстракция. Голое логическое утверждение совершенно очевидно.

Хотя теперь, когда я об этом думаю, и в свете комментария Карла ниже, бывают периоды, когда Range является совершенно допустимой и полезной абстракцией (например, при работе с Feeds). Так что, в зависимости от семантики x, возможно, вам нужна абстракция.

5 голосов
/ 12 апреля 2010

Кенни прибил его в комментариях.

if (10 < x && x < 20)

Вы хотите, чтобы они оба были меньше или оба больше, чем; изменение направления сравнения приводит к запутанной логике, когда вы пытаетесь читать быстро.

4 голосов
/ 12 апреля 2010
  if(x < 20)
  {
   if(x > 10)
   {

   //...

   }
  }

OR

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

   //...

   }
  }
1 голос
/ 12 апреля 2010

Единственное, что вы можете сделать, это потерять лишние скобки, поскольку && имеет более низкий приоритет, чем > и <:

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

Кроме этого: нет более короткого пути.

0 голосов
/ 12 апреля 2010

Самый быстрый способ - это переключатель.


EDIT:

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

компилируется в таблицу переходов, а не в длинную серию ifs.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...