Поменяйте местами операторы if - PullRequest
3 голосов
/ 31 октября 2010

Я работаю над минимизацией и улучшением кода.Мой вопрос: возможно ли поменять операторы if выше, не разрушая логику кода?

    int c1 = Integer.parseInt(args[0]) ;
    int c2 = Integer.parseInt(args[1]) ;
    int c3 = Integer.parseInt(args[2]) ;

    if (c2-c1==0)
      if ( c1 != c3 )

Поскольку между обеими операциями if нет операций, которые пишут переменные, я бы сказал да, но яне уверен.

Есть идеи?

Ответы [ 5 ]

10 голосов
/ 31 октября 2010

Я не понимаю, почему вы хотите (c2 - c1 == 0) вместо c1 == c2

, почему бы не пойти по маршруту

if ((c1 == c2) && (c1 != c3)){
  do_stuff();
}

или

if ((c1 != c3) && (c1 == c2)){
  do_stuff();
}

Как примечание, нет никакого штрафа или преимущества в переключении c1 для c2 где-либо.Из вышесказанного, размещение условия с наибольшей вероятностью неудачи первым немного более эффективно, поскольку второе условие не будет оцениваться, если первое не выполнено.

Также обратите внимание, что это микрооптимизация, вам никогда не следуетучитывая скорость.

Третье замечание: если ваша программа больше ничего не делает, и завершает работу, если это условие не выполняется, и вы действительно хотите микрооптимизировать (чего вы не делаете), я предлагаю не анализироватьаргументы, прежде чем вы знаете, что они необходимы.если c1 будет в большинстве случаев не равен c2, то вы можете подождать с помощью синтаксического анализа c3, пока не узнаете, что нужно проверить его.Это строго теория.Не делайте этого на практике, так как это сделает ваш код намного труднее для чтения.Гораздо понятнее обработать все переменные командной строки как можно быстрее.

3 голосов
/ 31 октября 2010
int c1 = Integer.parseInt(args[0]) ;
int c2 = Integer.parseInt(args[1]) ;
int c3 = Integer.parseInt(args[2]) ;

if (c2 == c1 && c1 != c3 ) {
   ...
}
1 голос
/ 31 октября 2010

Если вы имеете в виду

if ((c1 != c3) && (c2-c1==0))

и вы не планируете делать что-то особенное, только если c2-c1==0 тогда да.

1 голос
/ 31 октября 2010

Если больше нет задействованных блоков, тогда я предлагаю написать это как:

if (c2-c1==0 && c1 != c3 )

или, если вы хотите поменять их местами,

if (c1 != c3 && c2-c1==0)
1 голос
/ 31 октября 2010

Да. Вы также можете написать if ((c2-c1==0) && (c1 != c3)).

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