Function


Dalam pembuatan program yang besar, tentu saja harus dikembangkan secara terstruktur sehingga program menjadi lebih mudah dikembangkan dan dimaintenance. Salah satu usaha yang dapat dilakukan adalah memecah program menjadi kesatuan logika yang lebih kecil dimana proses yang sama dikelompokan menjadi sub program yang diberi nama, dan dapat dipanggil pada saat yang dibutuhkan.


Pemakaian function digunakan untuk proses maupun rumus yang perlu mengembalikan nilai kepada pemanggil, adapun tata cara penulisan function adalah sebagai berikut :
 
Function name[(arglist)] [ As type ] 
   [ statements ]
   [ Exit Function ]
   [ statements ]
End Function
Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module GenapGanjil
    Function IsGenap(x As Long) As Boolean
    If (x Mod 2) = 0 Then
       Return True
    Else
       Return False
    End If
    End Function
    REM program utama
    Sub Main()         
        Dim bil As Long
        Console.Write("Masukan Bilangan :")
        bil = Console.ReadLine()
        If IsGenap(bil) Then
           Console.WriteLine("Bilangan {0} adalah Genap",bil)
        Else
           Console.WriteLine("Bilangan {0} adalah Ganjil",bil)
        End If
    End Sub
End Module
Defaultnya parameter pada function dikirim secara ByVal, kadang-kadang kita menginginkan proses yang dapat mengembalikan lebih dari satu nilai yang mana dapat dipenuhi dengan menggunakan parameter yang dikirim secara ByRef.
Misalnya kita ingin menghitung akar persamaan kuadrat dengan menggunakan rumus ABC. Yang mana X1 dan X2 yang kemungkinan akar imaginier, dimana function akan mengembalikan suatu nilai true (ada solusi) atau false (tidak ada solusi).
Contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module AkarKuadrat
    Function CariAkar(A as Long, B as Long ,C As Long, _
             ByRef X1 as single ,ByRef X2 as single) As Boolean
        Dim D as Long
        D = B^2 - 4*A*C
        If D < 0 Then                        'Akar Imaginier
           Return False                      'Tidak ada solusi
        Else
           X1 = (-B + Math.Sqrt(D))/(2*A)    'argumen X1
           X2 = (-B - Math.Sqrt(D))/(2*A)    'argumen X2
           Return True                       'Ada solusi
        End If
    End Function
    REM program utama
    Sub Main()         
        Dim A,B,C As Long
        Dim X1,X2 As Single
        Console.WriteLine("Mencari akar persamaan kuadrat")
        Console.Write("Masukan A :")
        A = Console.ReadLine()
        Console.Write("Masukan B :")
        B = Console.ReadLine()
        Console.Write("Masukan C :")
        C = Console.ReadLine()
        If CariAkar(A,B,C,X1,X2) Then
           Console.WriteLine("Akar X1={0} X2={1}",X1,X2)
        Else
           Console.WriteLine("Akar imaginier")
        End If
    End Sub
End Module

Catatan :
Perintah Return digunakan untuk mengembalikan nilai ke pemanggil, dan jika suatu Exit Function digunakan, maka function akan mengembali nilai defaut berupa 0 for Byte, Char, Decimal, Double, Integer, Long, Short, and Single; Nothing for Object, String, and all arrays; False for Boolean; and #1/1/0001 12:00 AM# for Date.

Jika kita perlu melewatkan suatu array sebagai argumen pada function, maka dapat digunakan keyword ParamArray untuk melewatkan nilai array secara by value, contoh :
Option Explicit On
Imports System
Imports Microsoft.VisualBasic
Public Module ModArr
    Function sumArray(ByVal Paramarray Dat() As Byte)
        Dim Total As Long = 0
        For I As Integer = 0 To UBound(Dat)
            Total += Dat(I)
        Next I
        Return Total      
    End Function
    Dim Digit() As Byte = {0,1,2,3,4,5}
    Sub Main()
        Console.WriteLine(sumArray(Digit))
    End Sub
End Module