Perché lo strumento offre di cambiare il codice - solo perché può?

3

Resharper (o è Visual Studio - è una lampadina gialla con un piccolo filamento rosso in esso) offre "invert if" su questo codice:

if (tItems >= 0)
{
    return tItems;
}
SetTotalItemsAndTotalAmt();

... e se lo permetto, diventa questo:

if (tItems < 0)
{
    SetTotalItemsAndTotalAmt();
}
return tItems;

... ma poi offre di nuovo "inverti se", e se abboccerò credibilmente all'esca, tornerà al suo antico splendore.

Se un modo è considerato migliore (più grokkable, suppongo) rispetto all'altro, perché dovrebbe consentire anche un'inversione inversa? E se si tratta di "sei di una e mezza dozzina di altri", perché si preoccupa anche di offrire un cambiamento?

UPDATE

In realtà, a pensarci bene, uno di questi modi non è nemmeno valido, perché dice " WorkFiles.getAmount ()": non tutti i percorsi di codice restituiscono un valore "a meno che non abbia la dichiarazione di ritorno al di fuori della condizione if.

La mia ipotesi è che questo è non Resharper che sta facendo questo; quei gatti con l'Urquell non farebbero una cosa del genere, mi pare.

    
posta B. Clay Shannon 30.08.2013 - 00:48
fonte

1 risposta

4

È ReSharper che offre questo e lo offre perché può farlo. Ci possono essere molte buone ragioni per lasciarlo fare. Uso frequentemente questo quando refactoring il codice come:

if (cond1) {
   if (cond2) {
      if (cond3) {
         DoSomething();
      } else {
         throw "Error 3";
      }
   } else {
      throw "Error 2";
   }
} else {
   throw "Error 1";
}
return;

in:

if (!cond1) throw "Error 1";
if (!cond2) throw "Error 2";
if (!cond3) throw "Error 3";
DoSomething();
return;

È particolarmente utile quando quei if s vengono eseguiti per diverse schermate di codice. E sì, vedo codice come questo spesso.

    
risposta data 30.08.2013 - 02:03
fonte

Leggi altre domande sui tag