Passare a una funzione un numero imprecisato di argomenti
Una funzione i cui argomenti sono in numero arbitrario si dice variadica.
Argomenti ovvero Parametri
Per poter passare un numero "imprecisato" di argomenti a una funzione occorre che la funzione faccia ricorso alla parola chiave '...'
Private Sub Funzione(...)
Scritta così questa funzione o metodo accetterà un qualunque numero di argomenti di vario tipo.
Per fare in modo che la funzione possa leggere gli argomenti a lei passati e rispondere adeguatamente, Gambas ci mette a disposizione la classe statica Param
Con questa classe possiamo verificare i parametri passati attraverso la variabile vettoriale variant ottenuta attraverso Param.All e il numero di parametri attraverso Param.Count.
Invece per conoscerne il tipo ci avvarremo di TypeOf(variant[x])
Esempio pratico
Creeremo una funzione che sommerà tutti i numeri interi a lei passati:
Public Sub Main()
Print SommaInteri(1, 2, 3, 4, 5, 6, 7, 8, 9)
End
Private Function SommaInteri(...) As Long
Dim aSomma As Variant = Param.All
Dim iSomma As Long = 0
For i As Integer = 0 To aSomma.Max
If TypeOf(aSomma[i]) = 4 Then
iSomma += aSomma[i]
Else
Print "#ERRORE: Tipo di dato non corrispondente"
Return 0
Endif
Next
Return iSomma
End
Verifica del numero degli argomenti
Volendo applicare un ulteriore maggior controllo alla funzione potremo passare un primo dato che indichi alla funzione il numero degli argomenti passati:
Public Sub Main()
Print SommaInteri(5, 1, 2, 3, 4, 5)
End
Private Function SommaInteri(argomenti As Byte, ...) As Long
Dim aSomma As Variant = Param.All
Dim iSomma As Long = 0
If Param.Count <> argomenti Then
Print "#ERRORE: Numero di argomenti non corrispondente"
Return 0
Endif
For i As Integer = 0 To aSomma.Max
If TypeOf(aSomma[i]) = 4 Then
iSomma += aSomma[i]
Else
Print "#ERRORE: Tipo di dato non corrispondente"
Return 0
Endif
Next
Return iSomma
End