Evita la ripetizione del codice in dichiarazioni condizionali [duplicato]

0

Ho programmato per oltre 15 anni. Mi considero un ottimo programmatore, ma capisco (come tutti noi) ci sono cose su cui ho bisogno di lavorare. Una di queste cose è la ripetizione del codice quando si tratta di condizioni. Darò un campione generico:

if(condition1)
{
     //perform some logic
     if(condition2)
     {
          //perform some logic
          if(condition3)
          {
               //Perform logic
          }
          else
          {
               //MethodA(param)
          }
     }
     else
     {
          //MethodA(param)
     }
}
else
{
     //MethodA()
}

Ora, non posso renderlo più semplice effettuando quanto segue:

if(condition1 && condition2)
{

}
else
{

}

Non posso farlo poiché ho bisogno di eseguire qualche logica se condizione1 è vera e prima di testare condizione2.

C'è un modo di strutturare se ... altro blocca dove se hai bisogno di chiamare un metodo in ogni altro blocco, non ti stai ripetendo?

    
posta Ethosik 23.08.2014 - 19:06
fonte

1 risposta

5

Il tuo codice può essere facilmente riscritto in:

if(not condition1)
{
    MethodA()
    return
}

//perform some logic
if(condition2)
{
     //perform some logic
     if(condition3)
     {
          //Perform logic
          return
     }
}

MethodA(param)

Quindi, una parte del codice può essere estratta in un metodo:

int Hello()
{
    if(condition1)
    {
        World()
    }
    else
    {
        MethodA()
    }
}

void World()
{
    //perform some logic
    if(condition2)
    {
        //perform some logic
        if(condition3)
        {
            //Perform logic
            return
        }
    }

    MethodA(param)
}

La logica personalizzata in condizioni è preservata, ma non hai la duplicazione del codice.

Inoltre, quando la duplicazione del codice è solo una chiamata di un metodo, questo non è così fastidioso come se ci fossero più LOC ripetute o se si stesse ripetendo una chiamata con gli stessi cinque argomenti. Refactor se è facile; in caso contrario, la duplicazione va bene.

    
risposta data 23.08.2014 - 19:35
fonte

Leggi altre domande sui tag