Utilizzare le istruzioni switch per il flusso dell'applicazione?

3

Generalmente uso le istruzioni switch per semplificare un blocco di più istruzioni if, ad esempio restituendo una stringa di feedback a un utente in base a un input a scelta multipla.

Tendo anche a costruire classi in modo tale che esista un unico metodo di "gestione", per evitare passaggi sequenziali o invocazione di metodi concatenati all'interno di altri metodi della classe. Ho trovato questo aiuta a mantenere i metodi flessibili e focalizzati - cioè.

class MyClass{

    // this method does nothing more than invoke the relevant method
    // depending on the status following the previous. It's entire purpose
    // is to control application flow
    public function manageFlow($input){
        $status = $this->stepOne($input);
        if($status == false){
            //exit routine
        }

        $status = $this->stepTwo($input);
        if($status == false){
            //exit routine
       }
    }

    // this method has several sequential steps implemented direcly within it, 
    // for example to a user logging in
    // it makes it impossible to re-use any of the intermediary steps
    public function tangledFlow($input){
         if($input == 'something){
         //100 lines of code
         }
         //then handing on to the next bit
         if($this->User->Authenticated){
         //another 100 lines...
         }
    }
}

Poi ho pensato che avrei potuto usare un'istruzione switch per controllare questo tipo di esecuzione sequenziale - quindi la mia domanda è: qualcuno ha usato un'istruzione switch per questo tipo di controllo di flusso?

    
posta sunwukung 03.11.2010 - 10:24
fonte

3 risposte

3

Quello che stai descrivendo è una macchina a stati, e sì, molte persone usano le istruzioni switch per implementarle. Di solito sono più puliti, ma può essere più difficile seguire il flusso logico.

    
risposta data 03.11.2010 - 14:46
fonte
1
L'istruzione

Switch è un'istruzione condizionale utilizzata per eseguire azioni diverse in base a condizioni diverse. Cioè L'istruzione Switch viene utilizzata per selezionare uno dei molti blocchi di codice da eseguire.

L'istruzione Switch è un'istruzione di controllo che gestisce più selezioni passando il controllo a una delle istruzioni case all'interno del suo corpo.

Da mio post sul blog :

Syntax :

switch (expression)
        {
           case label_1:
             //code to be executed if expression = label_1 ;
           break;
           case label_2:
             //code to be executed if expression = label_2;
           break;
             /*.............
             .............*/
          default:
            //code to be executed if expression is not equal to all label_1, label_2,... etc.
        }
    
risposta data 30.09.2011 - 12:10
fonte
0

In questo caso, sembra che tu stia usando PHP, quindi l'uso di un'istruzione switch non avrà un impatto enorme sulle prestazioni del codice per utilizzare un parametro switch o if in questa situazione, e non ci sono " t principali problemi di sintassi di cui dovresti preoccuparti.

Quindi, detto questo, direi fare ciò che pensi sarà più gestibile. Se la tua squadra preferisce passare le dichiarazioni sui treni di ifs, allora usa quella. Se è vero il contrario, usa quello.

Dovresti assolutamente usare manageFlow su tangledFlow per la progettazione del tuo metodo, comunque. tangledFlow cerca di fare troppe cose e in tal modo riduce la manutenibilità (e la leggibilità!).

    
risposta data 03.11.2010 - 14:00
fonte

Leggi altre domande sui tag