2010-02-04 8 views
17

C'è un modo per tornare presto da una funzione in ASP classica anziché eseguire l'intera durata della funzione? Per esempio Diciamo che ho la funzione ...Ritorno anticipato da una funzione nel classico ASP

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    else 
    Response.Write("Made it to the end")  
    end if 
End Function 

Posso scriverlo in questo modo ...

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    return 
    end if 

    Response.Write("Made it to the end")  
End Function 

Nota l'istruzione return che ovviamente non posso fare in ASP classico. C'è un modo per interrompere l'esecuzione del codice in cui risiede quella dichiarazione di ritorno?

risposta

27

Sì utilizzando exit function.

Function MyFunc(str) 
    if str = "ReturnNow!" then 
    Response.Write("What up!")  
    Exit Function 
    end if 

    Response.Write("Made it to the end")  
End Function 

Io di solito uso questo quando si restituisce un valore da una funzione.

Function usefulFunc(str) 
    ''# Validate Input 
    If str = "" Then 
     usefulFunc = "" 
     Exit Function 
    End If 

    ''# Real function 
    ''# ... 
End Function 
+0

@Anthony, grazie per l'aiuto nella formattazione con i commenti. –

4

Con ASP classico, è necessario utilizzare Exit Function:

Function MyFunc(str) 
    if (str = "ReturnNow!") then 
    Response.Write("What up!")  
    Exit Function 
    end if 

    Response.Write("Made it to the end")  
End Function 
4

Come è stato fatto notare che si può uso Exit Function ma si dovrebbe usare cautela. Nel semplice esempio che hai dato non c'è davvero alcun vantaggio che nessun altro codice avrebbe eseguito in ogni caso.

L'inserimento di punti di uscita in un blocco di codice può rendere difficile seguire e eseguire il debug. Più seriamente può portare a successive modifiche al codice che sono più difficili, richiedendo modifiche più estese e quindi aumentando il rischio. Quindi un tale modello dovrebbe essere considerato un "cattivo odore".

Uno scenario tipico in cui è ragionevolmente accettabile il punto in cui il codice può formulare alcune asserzioni sui parametri di input prima di continuare con il corpo del codice. Oltre a questo dovresti essere in grado di esprimere una ragione davvero buona per farlo.

Si potrebbe dire "Se lo faccio in questo modo avrò più strutture If e aumenterò eccessivamente l'identificazione nel codice". Se è così allora la funzione ha troppo codice in esso e dovrebbe essere refactored in funzioni più piccole.

+0

Alcuni punti positivi Anthony. È sicuramente un esempio molto semplice e l'ho usato solo per scoprire quale fosse la sintassi corretta. Stavo davvero citando il tuo ultimo punto sull'avere più strutture "se" e aumentando il rientro se non usi "exit". Personalmente penso che questo sia un problema di "guerra religiosa" nella programmazione che è più una questione di preferenze personali. Indipendentemente dal tuo feedback è fantastico quindi grazie. –

+1

@Rob: definirei un problema "Religioso" come un problema in cui la scelta di una parte o un'altra ha un impatto minimo o nullo sui risultati. Le migliori pratiche d'altra parte riguardano questioni in cui la scelta di una parte o di un'altra può avere un impatto significativo sui risultati finali. Come regola generale (tenendo presente che nessuna regola è mai assoluta) è "best practice" per qualsiasi blocco riconoscibile di codice avere un punto di entrata e un punto di uscita. Questo è vero per le funzioni, se le istruzioni, i cicli ecc. 'Exit Function' è uno strumento utile quando viene trovata una ragionevole __exception__ alla" best practice ". – AnthonyWJones

+0

È certamente logico avere un punto di accesso e di uscita per le funzioni e sarei d'accordo che sia una buona pratica. Il mio ragionamento principale per l'utilizzo della chiamata "Exit Function" sarebbe per un punto che hai già menzionato che sta eseguendo varie asserzioni e/o convalide. –