Invio di funzioni da restituire o da morire

0

Quale è preferibile sia per la tecnica solida che per la codifica sicura?

Esempio 1:

function_one()
    blah;
    function_two()
        blah;
        print blah;
        exit;

...

Esempio n. 2:

function_one()
    blah;
    function_two()
        blah;
        return blah;
    return blah;
print blah;

Ovviamente questa è una versione semplificata, e sto cercando una risposta che sia universale per alberi di funzioni più grandi, se possibile.

-1: Mi è piaciuto l'esempio n. 1 perché sembrava più rapido terminare non appena è stato fatto, facendo ciò che fa, invece di tornare alla chiamata originale per vivere la sua vita naturale. Inoltre, l'Esempio n. 1 sembra compartimentare il codice, aiutando a prevenire l'esecuzione involontaria di codice non intenzionale (che dovrebbe essere rilevato durante il test, ma mi preparo per il peggio). Tuttavia, questo modello si è dimostrato difficile da mantenere e non sembra in grado di adattarsi bene. Per esempio, avevo una pagina web che scrissi per echeggiare ciò che doveva e poi terminare, ma questo causava problemi lungo la strada assicurandomi che le intestazioni http fossero inserite prima dell'output; ciò richiederebbe l'invio delle intestazioni come parametro di funzione.

-2: L'esempio 2 sembra mantenere un ordine standard di fare le cose perché non tutte le funzioni terminano il prima possibile. Anche il codice può essere combinato più facilmente senza passare parametri aggiuntivi come nell'esempio # 1. Tuttavia, l'esempio n. 2 richiede più dichiarazioni di ritorno e continuerà il resto del programma. Cosa ne pensi?

    
posta user58446 19.12.2014 - 14:50
fonte

1 risposta

7

In generale, dovresti evitare di uscire dall'intero programma da funzioni casuali. Perché?

  • Rende il tuo codice difficile da leggere. La funzione in questione diventa difficile perché devi quindi preoccuparti di quale contesto viene chiamato. Il resto del programma diventa difficile perché il punto di uscita "normale" non è sempre corretto.
  • Rende il codice meno riutilizzabile. Solo perché ritieni che un errore fatale (con un certo messaggio) non significhi che è la fine di altri programmi.
  • Rende difficile quel codice al test dell'unità. A seconda della lingua, potrebbe essere impossibile eseguire il test dell'unità.

Ci sono certamente casi in cui può avere senso - gestori di eccezioni globali che puliscono prima di morire, per esempio. Ma in generale, basta tornare o lanciare.

    
risposta data 19.12.2014 - 15:00
fonte

Leggi altre domande sui tag