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