W Visual Basic istnieją dwa główne typy procedur: Sub i Function. Główna różnica polega na tym, że Sub nie zwraca wartości, podczas gdy Function zawsze zwraca wartość określonego typu.
Sub używa się do wykonywania działań (np. zmiany stanu, wyświetlanie na ekranie, operacje na plikach), gdy nie jest wymagane zwracanie wyniku wykonania.
Function stosuje się, gdy potrzebne jest zwrócenie jakiejś wartości (np. obliczenia, uzyskanie wyniku logiki).
Przykład:
Sub ShowMessage(ByVal message As String) MsgBox(message) End Sub Function Square(ByVal x As Integer) As Integer Square = x * x End Function ' Zastosowanie: ShowMessage("Hello!") Dim result As Integer result = Square(5) ' result = 25
Jaka jest różnica między procedurą Sub a Function w VB6, i czy można użyć operatora Return wewnątrz Sub?
Prawidłowa odpowiedź: W VB6 operator Return jest używany tylko w Function. W Sub można używać Exit Sub do wyjścia z procedury, ale nie można używać Return z jakąkolwiek wartością. Wiele osób myli Return z Exit, ale pełnią one różne zadania.
Sub ExampleSub() ' Return ' Błąd: nie można w Sub Exit Sub ' Poprawne End Sub Function ExampleFunction() As Integer ExampleFunction = 5 ' lub ' Return 5 ' Dozwolone w VB.NET End Function
Historia
W projekcie jeden z programistów zamiast Function użył Sub, zapominając, że trzeba zwrócić wartość. W rezultacie obliczona wartość nigdzie się nie zapisywała, logika się załamała, testy nie przeszły.
Historia
W dużej aplikacji Windows Forms używano Sub do walidacji wartości. Dane miały się zmieniać w zależności od wyniku, ale Sub nie mogła zwrócić wartości logicznej. W rezultacie walidacja nie zadziałała, pojawiły się błędy w obliczeniach.
Historia
Nowicjusz próbował użyć operatora Return w Sub, jak w innych językach programowania, co spowodowało, że aplikacja przestała się kompilować. Straciliśmy kilka godzin na szukanie przyczyny, aż przypomnieliśmy sobie, że w Sub używa się Exit Sub, a Return — tylko w Function.