Site Tools


Optional Arguments to VBScript Subroutines and Functions

Developer: RhinoScript
Summary: Demonstrates how to implement optional arguments in VBScript.

Question

How can I make an argument of a VBScript function or subroutine optional?

Answer

In VBScript, the Optional keyword, which allows some arguments to be left out in Visual Basic, is not implemented. This means that you must declare every argument that you want to use.

What you can do is pass null values to your functions. For example:

 Function SomeArgs(one, two, three, four)
   SomeArgs = one & two & three & four
 End Function
 
 Call SomeArgs(1, 2, 3, Null)

Discusssion

To work around this limitation, you can use an Array-based approach to simulate optional arguments. To see how to use the Array-based approach for creating subroutines with optional arguments, consider the following example:

 Sub MySubroutine(arrArgs)
 
   ' Declare local variables
   Dim v1, v2, v3, v4
 
   ' Initialize the local variables with default values
   v1 = 1 : v2 = 2 : v3 = 3 : v4 = 4
 
   Select Case UBound(arrArgs)
     Case 0
       v1 = arrArgs(0)  
     Case 1
       v1 = arrArgs(0)
       v2 = arrArgs(1)
     Case 2
       v1 = arrArgs(0)
       v2 = arrArgs(1)
       v3 = arrArgs(2)
     Case 3
       v1 = arrArgs(0)
       v2 = arrArgs(1)
       v3 = arrArgs(2)
       v4 = arrArgs(3)
     Case Else
       Exit Sub
   End Select
 
   Rhino.Print "v1  = " & CStr(v1)
   Rhino.Print "v2  = " & CStr(v2)
   Rhino.Print "v3  = " & CStr(v3)
   Rhino.Print "v4  = " & CStr(v4)
 
 End Sub

Notice in the subroutine declaration, only defined one argument has been defined:

 Sub MySubroutine(arrArgs)  

The argument will be an array of values we would like to pass into the subroutine. The next few lines declare local variables and initializes them to default values (simple numbers, in this case). Next, use the UBound() function to determine the number of arguments passed. Then assign the array elements to the local variables:

 Select Case UBound(arrArgs)
   Case 0
     v1 = arrArgs(0)
   Case 1
     v1 = arrArgs(0)
     v2 = arrArgs(1)
   Case 2
     v1 = arrArgs(0)
     v2 = arrArgs(1)
     v3 = arrArgs(2)
   Case 3
     v1 = arrArgs(0)
     v2 = arrArgs(1)
     v3 = arrArgs(2)
     v4 = arrArgs(3)
   Case Else
     Exit Sub
 End Select

Since the array is zero-based, the first case branch assigns the first element to our v1 variable. As add more arguments to the function are needed, one can easily add more case branches.

To call this subroutine, create an array of the size based on the number of arguments you want to pass into the function, and then populate this array with the values you want to pass to the function:

 ' Create the array to pass to MySubroutine 
 Dim arrArgs
 
 ' Call the subroutine with two arguments
 Redim arrArgs(1)
 arrArgs(0) = Value1
 arrArgs(1) = Value2
 
 Call MySubroutine(arrArgs)

Or

 ' Call MySubroutine with three arguments
 Call MySubroutine(Array(Value1, Value2, Value3))
developer/scriptsamples/optionalarguments.txt ยท Last modified: 2010/02/05 by dale