2015-08-17 5 views
6

Ich gehe gerade durch unsere Codebase bei der Arbeit, versuchen, die Warnungen zu löschen, die beim Kompilieren generiert werden, und es gibt eine Tonne von "Funktion ohne As-Klausel, Klausel" Warnungen.Besteht ein Unterschied zwischen der Verwendung einer Return-Anweisung und der Zuweisung eines Werts zur Funktion?

Zwar gehen zurück und die meisten dieser Wechsel ein Sub anstelle eines Function zu sein, habe ich eine Return Aussage gelegentlich übersehen, weil ich den Namen der Methode nur markieren und für einen Wert zugewiesen aussehen, das ist, wie es in den meisten getan des Codes.

So war ich nur fragen, ob ein Unterschied zwischen diesen gibt es:

Private Function Foo() As String 
    Foo = String.Empty 
End Function 

Oder:

Private Function Foo() As String 
    Return String.Empty 
End Function 

Funktionell, so scheint es identisch zu sein, aber ich war nicht sicher, ob es eine hinter war die Szenen unterscheiden sich darin, wie der Compiler das interpretiert.

Antwort

6

Der Hauptunterschied besteht darin, dass Return die Funktion verlässt, während ein Wert dem Funktionsnamen nicht zugewiesen wird. So sind die zwei Äquivalente sollten

Private Function Foo() As String 
    Foo = String.Empty 
    Exit Function 
    '..... 
End Function 

sein Oder:

Private Function Foo() As String 
    Return String.Empty 
    '..... 
End Function 
+0

Oh, fair genug ja.Ich weiß, dass "Return" sofort existiert, ich war mir nur nicht sicher, ob hinter den Kulissen irgendetwas anderes vor sich ging, wie die Variablen gehandhabt werden oder irgendetwas in dieser Art. – sab669

3

Es gibt keinen signifikanten Unterschied.

Allerdings bevorzuge ich Return <variable>, da es in Bezug auf die Lesbarkeit des Codes viel klarer ist. Natürlich ist das eine persönliche Vorliebe.

Es lernt auch die Möglichkeit, auf eine andere Variable mit dem gleichen Namen zu treten.

3

Soweit Flusskontrolle Aussagen gehen, sie sind nicht notwendigerweise identisch , obwohl die beiden genannten Beispiele identisch verhalten würde.

Wenn Sie dies tun:

Return String.Empty 

Die Funktion beendet und das Ergebnis der Funktion ist der angegebene Wert. Wenn Sie dies tun:

Foo = String.Empty 

Das Ergebnis der Funktion ist der angegebene Wert, aber die Funktion nicht Ausfahrt. Sie können etwas tun:

Foo = String.Empty 
' other logic 
Foo = someValue 

Wenn die Funktion irgendwo verließ in other logic, wie aus einer Exit Function Aussage, dann wäre das Ergebnis String.Empty gewesen sein, da dies der letzte Wert als das Ergebnis eingestellt war. Wenn dies nicht der Fall wäre, wäre das Ergebnis someValue, weil der letzte als Ergebnis gesetzte Wert wäre.

Sie werden für ähnliche Zwecke verwendet und geben Werte von der Funktion zurück. Aber der Fluss (und die nachfolgende Lesbarkeit) des Codes kann je nach Verwendung sehr unterschiedlich sein.

Verwandte Themen