A19. Parametri opzionali e indefiniti
Parametri opzionali
I parametri opzionali, come suggerisce il nome, sono parametri che non devono essere per forza passati a un metodo, ma si può decidere di
ometterli. Se si sceglie questa opzione, essi assumeranno un valore predefinito che viene impostato durante la loro dichiarazione. La
sintassi è semplice:
Non è possibile omettere il valore predefinito nella dichiarazione, altrimenti il compilatore non saprebbe quale impostare, ad esempio:Sub /Function [Nome metodo](Optional ByVal /ByRef [Nome parametro]As _ [Tipo] = [Valore predefinito]) '... End Sub /Function
Questa semplice funzione moltiplica x per y, e quindi vi aggiunge Z, che di default è 0. Se Z viene specificato, verrà aggiunto al prodotto, altrimenti il suo valore sarà ininfluente (0).Function Moltiplica(ByVal XAs Int32,ByVal YAs Int32, _ OptionalByVal ZAs Int32 = 0)As Int32Return X * Y + ZEnd Function
Parametri indefiniti
Questo particolari tipo di parametri non rappresenta un solo elemento, ma bensì una collezione di elementi: infatti, si specifica un parametro
come indefinito quando non si sa a priori quanti parametri il metodo richiederà. A sostegno di questo fatto, i parametri indefiniti
sono dichiarati come array, usando la keyword ParamArray, in questo modo:
Come si è potuto notare, vicino a [Nome parametro indefinito] c'è una coppia di parentesi, il che sta a indicare che quello è a tutti gli effetti un array di elementi. Ecco un semplice esempio:Sub /Function [Nome metodo](ByVal /ByRef ParamArray [Nome parametro]() _As [Tipo]) '... End Sub /Function
Prima di tutto mi sembra di dover spiegare la funzione UBound. Essa accetta come parametro un valore di tipo array e ne restituisce l'indice massimo. Esiste anche la controparte LBound che restituisce l'indice minimo (ossia 0): entrambi sono abbreviazioni di Upper Bound e Lower Bound, ossia margine superiore e margine inferiore. La funziona Somma accetta un numero indefinito di parametri, che vanno immagazzinati sottoforma dell'array Valori. Come si vede dal sorgente, si possono specificare sia più valori che un vettore di valori come parametri di Somma.Module EsempioFunction Somma(ByVal ParamArray Valori()As Int32)As Int32Dim TempAs Int32 = 0For IAs Int16 = 0To UBound(Valori) Temp += Valori(I)Next Return TempEnd Function Sub Main()Dim IAs Int32Dim V()As Int32 = {1, 3, 5, 7, 9} 'Somma due valori I = Somma(1, 2) 'Somma quattro valori I = Somma(3, 90, 67, 23) 'Somma un array di cinque valori I = Somma(V)End Sub End Module
The Totem's Lair - Copyright (C) 2009
È vietata la riproduzione sia totale che parziale del sito.



