Convalida i dati per annidare o meno all'interno di try and catch

2

Sto convalidando i dati, in questo caso voglio uno dei tre inti. Sto facendo questa domanda, poiché è il principio fondamentale a cui sono interessato. Questo è un esempio di base, ma sto sviluppando le migliori pratiche ora, quindi quando le cose si complicheranno in seguito, sono più preparato a gestirle.

È preferibile avere il try e il catch seguito dalla condizione:

public static int getProcType()
{
    try
    {
        procType = getIntInput("Enter procedure type -\n"
            + " 1 for Exploratory,\n" 
            + " 2 for Reconstructive, \n"
            + "3 for Follow up: \n");
    }
    catch (NumberFormatException ex)
    {
        System.out.println("Error! Enter a valid option!");
        getProcType();
    }
    if (procType == 1 || procType == 2 || procType == 3)
    {
        hrlyRate = hrlyRate(procType);
        procedure = procedure(procType);
    }
    else
    {
        System.out.println("Error! Enter a valid option!");
        getProcType();
    }

    return procType;
}

O è meglio mettere il se nel tentativo e prendere?

public static int getProcType()
{
    try
    {
        procType = getIntInput("Enter procedure type -\n"
            + " 1 for Exploratory,\n" 
            + " 2 for Reconstructive, \n"
            + "3 for Follow up: \n");

        if (procType == 1 || procType == 2 || procType == 3)
        {
            hrlyRate = hrlyRate(procType);
            procedure = procedure(procType);
        }
        else
        {
            System.out.println("Error! Enter a valid option!");
            getProcType();
        }
    }
    catch (NumberFormatException ex)
    {
        System.out.println("Error! Enter a valid option!");
        getProcType();
    }

    return procType;
}

Sto pensando che se entro la prova, potrebbe essere più veloce, ma potrebbe anche essere goffo. Quale sarebbe meglio, dato che la mia programmazione diventa più avanzata?

    
posta Yvette Colomb 29.10.2013 - 12:37
fonte

1 risposta

0

Non mi preoccuperei di usare un'eccezione. Invece solo un semplice test su una condizione IF sul metodo / funzione.

Come dice @gnat, metterlo in una funzione / funzione seprate è il migliore. Inoltre, considera l'aggiunta di un'enumerazione per il ritorno con un valore aggiuntivo come:

 Exploratory,
 Reconstructive, 
 FollowUp, 
 Undefined

Quindi, quando viene chiamato getProcType (), può restituire "Non definito". Se il tuo programma ottiene questo visualizza un messaggio all'utente e poi esce. Se ottiene un valore corretto, continua e chiama un altro metodo per chiamare la tariffa oraria e la procedura (metodo separato).

Nel tuo codice, come si annulla l'utente? Potrebbero rimanere bloccati cercando di entrare in 1,2,3 mentre la funzione continua a chiamarsi. Di solito è meglio fallire velocemente. Quindi, educatamente dire all'utente che hanno inserito il valore sbagliato, visualizzare un elenco di valori accettabili e quindi uscire. Presumo che si tratti di una sorta di utility da riga di comando.

Inoltre, posso suggerire di utilizzare un'interfaccia utente più sofisticata come una casella di riepilogo / una casella combinata che eliminerebbe l'errore di digitare l'utente. Quindi questa logica non sarebbe affatto necessaria. In generale, vogliamo evitare di usare il tipo nelle cose quando possibile.

    
risposta data 29.10.2013 - 15:36
fonte

Leggi altre domande sui tag