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…