Skip to content
Subroutines and Functions
step 1/5

Reading — step 1 of 5

Learn

~2 min readSubs, Functions, Arrays

VB.NET distinguishes:

  • Sub — does work, returns nothing (like void)
  • Function — returns a value

Sub — no return

Sub Greet(name As String)
    Console.WriteLine("Hello, " & name)
End Sub

Call: Greet("Ada") or Call Greet("Ada") (older style).

Function — returns value

Function Square(n As Integer) As Integer
    Return n * n
End Function

The As Integer declares the return type. Return value exits with that value.

Legacy alternative — assign to function name (still works):

Function Square(n As Integer) As Integer
    Square = n * n        ' assigns the return value
End Function

Optional and default arguments

Function Greet(name As String, Optional greeting As String = "Hello") As String
    Return greeting & ", " & name
End Function

Greet("Ada")                          ' "Hello, Ada"
Greet("Ada", "Hi")                    ' "Hi, Ada"
Greet("Ada", greeting:="Hi")          ' named argument

ByVal vs ByRef

Sub Increment(ByRef n As Integer)     ' pass by reference
    n += 1
End Sub

Dim x As Integer = 5
Increment(x)
Console.WriteLine(x)        ' 6 — modified by reference

ByVal (default) passes a copy. ByRef passes the variable itself. Use ByRef when you want to modify the caller's variable.

ParamArray (variadic)

Function SumAll(ParamArray nums() As Integer) As Integer
    Dim total As Integer = 0
    For Each n In nums
        total += n
    Next
    Return total
End Function

SumAll(1, 2, 3, 4, 5)        ' 15

Recursion

Function Factorial(n As Integer) As Long
    If n <= 1 Then Return 1
    Return n * Factorial(n - 1)
End Function

No special syntax — just call yourself.

Lambdas

Dim square = Function(n As Integer) n * n
Dim add = Function(a As Integer, b As Integer) a + b
Console.WriteLine(square(7))         ' 49
Console.WriteLine(add(3, 4))         ' 7

For multi-line lambdas:

Dim greet = Function(name As String) As String
                Dim prefix = "Hello, "
                Return prefix & name
            End Function

Lambdas are a 2008 addition — old VB.NET code uses delegates and AddressOf instead.

Discussion

Ask a question, share an insight, or help someone who’s stuck.

Sign in to post a comment or reply.

Loading…