Pergunta

Estou trabalhando na minimização e aprimoramento do código. Minha pergunta é: é possível trocar as declarações IF acima sem destruir a lógica do código?

    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 )

Como entre as duas, não há nenhuma operação que escreva as variáveis, eu diria que sim, mas não tenho certeza.

Alguma ideia?

Foi útil?

Solução

Eu realmente não vejo por que você quer (c2 - c1 == 0) ao invés de c1 == c2

Por que não ir o

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

ou

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

rota

Como nota, não há penalidade ou vantagem na troca de C1 para C2 em qualquer lugar. Do exposto, colocar a maior probabilidade de falhar em primeiro lugar é um pouco mais eficiente, porque a segunda condição não será avaliada se a primeira falhar.

Observe também que isso é uma micro otimização, você nunca deve considerar a velocidade.

Terceira nota, se o seu programa não fizer mais nada e sair se essa condição não se sustentar, e você realmente quer micro-otimizar (o que você não), eu sugiro não analisar os argumentos antes que você saiba que eles são precisava. Se C1 for desigual para C2 na maioria das vezes, você poderá esperar com a análise C3 até saber que precisa verificar. Esta é estritamente teoria. Não faça isso na prática, pois tornará seu código muito mais difícil de ler. É muito mais claro processar todos os vars de comando para algo sensato o mais rápido possível.

Outras dicas

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

if (c2 == c1 && c1 != c3 ) {
   ...
}

Sim. Você também pode escrever if ((c2-c1==0) && (c1 != c3)).

Se você diz

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

E você não planeja fazer algo especial apenas se c2-c1==0 então sim.

Se não houver mais blocos envolvidos, sugiro que você escreva como:

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

Ou, se você quiser trocá -los,

if (c1 != c3 && c2-c1==0)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top