Va bene usare la gestione delle eccezioni come condizioni di uscita per un metodo? [duplicare]

2

Quindi ho programmato per alcuni anni principalmente come dilettante / studente, e sono consapevole del fatto che l'utilizzo di eccezioni è generalmente disapprovato quando usato come una mancanza di considerazione per l'input e solo un catch-all (es. programmazione pigra). Ma ho una domanda specifica riguardante una domanda dell'intervista di programmazione:

Dato un elenco collegato, trova se c'è un ciclo in esso.

La soluzione consiste nell'usare due puntatori, iterare il primo di 1 e il secondo di 2 posizioni, e se mai si incontrano c'è un ciclo. Se ottieni un puntatore nullo, non esiste un ciclo.

Nel contesto di un'intervista, se ho scritto il seguente codice dicendo qualcosa del tipo:

"Sono consapevole che questo potrebbe non essere il miglior uso delle eccezioni, ma dal momento che NullPointerException è specificatamente la condizione di uscita, sembra il modo migliore per sfruttare il linguaggio per ottenere ciò che voglio in modo rapido In questo modo sto sfruttando le eccezioni per verificare l'input nullo, nonché per la condizione di uscita di raggiungere la fine dell'elenco. "

Questo sarebbe accettabile? O sarebbe considerato pigro?

boolean hasCycle(Node head) {

try{
    Node start = head;
    Node runner = head;
    do{
        start = start.next;
        runner = runner.next.next;
        if(start == runner) {
            return true;
        }

    }while(runner != start)   ;
}
catch(NullPointerException ex){
    return false;
}

return false;
}
    
posta Nick 30.09.2016 - 10:45
fonte

1 risposta

7

Considererei questo pigro.

Se sono la persona che mantiene il tuo codice quando vedo un'eccezione, mi aspetto che qualcosa di eccezionale sia successo. Quindi cerco cosa è questo caso eccezionale e come il codice si occupa di esso. A questo punto mi rendo conto che questo non è eccezionale e solo un regolare flusso di codice, quindi il mio processo di pensiero deve tornare indietro e riesaminare il codice alla luce di queste nuove informazioni. Tutto ciò rende il codice più lento da capire per me, e se lo sfoglio, potrei perderlo completamente.

Tutto ciò può essere evitato se la condizione del ciclo verifica esplicitamente la condizione nulla.

    
risposta data 30.09.2016 - 10:59
fonte

Leggi altre domande sui tag