2010-02-04 9 views
17

Czy istnieje sposób na wczesny powrót z funkcji w klasycznej ASP, zamiast uruchamiania pełnej długości tej funkcji? Na przykład powiedzmy, że mam funkcję ...Wczesny powrót z funkcji klasycznej ASP

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

mogę napisać to tak jak ...

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

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

Uwaga instrukcja return co oczywiście nie mogę zrobić w klasycznej ASP. Czy istnieje sposób na złamanie wykonywania kodu, gdzie znajduje się instrukcja return?

Odpowiedz

27

Tak przy użyciu 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 

Często używam tego podczas zwracania wartości z funkcji.

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

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

@Anthony dzięki za pomoc w formatowaniu komentarzy. –

4

z klasycznym ASP, trzeba użyć 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

Jak zostało wskazane ty możliwe, użytkowania Exit Function ale należy zachować ostrożność. W prostym przykładzie, który podałeś, naprawdę nie ma żadnej korzyści, żaden inny kod nie wykonałby tak czy inaczej .

Umieszczanie punktów wyjścia w całym kawałku kodu może utrudnić obserwowanie i debugowanie. Bardziej poważnie może to spowodować, że kolejne zmiany w kodzie będą trudniejsze, wymagające większych zmian, a tym samym zwiększającego ryzyko. Stąd taki wzór należy uznać za "nieprzyjemny zapach".

Typowy scenariusz, w którym jego akceptowalna jest sytuacja, w której kod może wprowadzać pewne twierdzenia na temat parametrów wejściowych, zanim przejdzie dalej do treści kodu. Poza tym powinieneś być w stanie wyrazić naprawdę dobry powód, aby to zrobić.

Możesz powiedzieć: "Jeśli zrobię to w ten sposób, będę miał więcej struktur If i nadmiernie zwiększę identyfikację w kodzie". Jeśli tak jest, to funkcja ma za dużo kodu i powinna być refaktoryzowana na mniejsze funkcje.

+0

Kilka dobrych punktów Anthony. Jest to z pewnością bardzo prosty przykład i użyłem go, aby dowiedzieć się, jaka jest właściwa składnia. Naprawdę zamierzałem wspomnieć o twoim ostatnim punkcie dotyczącym posiadania większej liczby struktur "jeśli" i zwiększania wcięcia, jeśli nie używasz "wyjścia". Osobiście uważam, że to kwestia "wojny religijnej" w programowaniu jest bardziej kwestią osobistych preferencji. Niezależnie od twoich opinii jest świetny, więc dziękuję. –

+1

@Rob: Chciałbym zdefiniować kwestię "religijną" jako problem, w którym wybór jednej lub drugiej strony ma niewielki lub żaden wpływ na wyniki. Z drugiej strony, najlepsza praktyka dotyczy kwestii, w których wybór jednej lub drugiej strony może znacząco wpłynąć na ostateczne wyniki. Zgodnie z ogólną zasadą (mając na uwadze, że żadne reguły nie są bezwzględne), "najlepszą praktyką" jest to, że każdy rozpoznawalny blok kodu ma jeden punkt wejścia i jeden punkt wyjścia. Dotyczy to funkcji, jeśli instrukcje, pętle itp. 'Exit Function' jest użytecznym narzędziem, gdy znaleziono rozsądny __exception__ do" najlepszej praktyki ". – AnthonyWJones

+0

To prawda, że ​​z pewnością ma jeden punkt wejścia i wyjścia dla funkcji i zgodziłbym się, że jest to dobra praktyka. Moje główne uzasadnienie wywołania funkcji "Wyjście z funkcji" dotyczy punktu, o którym już wspomniałeś, który wykonuje różne asercje i/lub sprawdzenia poprawności. –

Powiązane problemy