In Visual Basic zijn er twee hoofdtypen procedures: Sub en Function. Het belangrijkste verschil is dat Sub geen waarde retourneert, terwijl Function altijd een waarde van een bepaald type retourneert.
Sub wordt gebruikt om acties uit te voeren (bijvoorbeeld het wijzigen van de status, het afdrukken naar het scherm, werken met bestanden) wanneer het resultaat van de uitvoering niet hoeft te worden geretourneerd.
Function wordt gebruikt wanneer je een waarde moet retourneren (bijvoorbeeld berekeningen, het verkrijgen van resultaten van logica).
Voorbeeld:
Sub ShowMessage(ByVal message As String) MsgBox(message) End Sub Function Square(ByVal x As Integer) As Integer Square = x * x End Function ' Toepassing: ShowMessage("Hallo!") Dim result As Integer result = Square(5) ' result = 25
Wat is het verschil tussen de Sub- en Function-procedure in VB6, en kan de Return-operator binnen een Sub worden gebruikt?
Correct antwoord: In VB6 wordt de Return-operator alleen in Function gebruikt. In Sub kan Exit Sub worden gebruikt om uit de procedure te gaan, maar de Return kan niet met een waarde worden gebruikt. Veel mensen verwarren Return en Exit, maar ze vervullen verschillende taken.
Sub ExampleSub() ' Return ' Fout: niet toegestaan in Sub Exit Sub ' Correct End Sub Function ExampleFunction() As Integer ExampleFunction = 5 ' of ' Return 5 ' Toegestaan in VB.NET End Function
Verhaal
Bij een project gebruikte een van de ontwikkelaars per ongeluk Sub in plaats van Function, vergeten dat er een waarde moest worden geretourneerd. Als resultaat werd de berekende waarde nergens opgeslagen, faalde de logica en lukten de tests niet.
Verhaal
In een groot Windows Forms-toepassing werd Sub gebruikt voor het valideren van waarden. Gegevens moesten veranderen afhankelijk van het resultaat, maar Sub kon geen booleaanse waarde retourneren. Dit zorgde ervoor dat de validatie niet werkte, wat fouten in de berekeningen veroorzaakte.
Verhaal
Een nieuwkomer probeerde de Return-operator binnen Sub te gebruiken, zoals in andere programmeertalen, waardoor de toepassing niet meer compileerde. We verloren uren met het zoeken naar de oorzaak, totdat we ons herinnerden dat je Exit Sub in Sub gebruikt, en Return alleen in Function.