Newsgroup: it.comp.lang.visual-basic
Titolo: Function ( Optional .......)

Provengo dal clipper do facevo ampio uso delle function e sto cercando di
adattare diverse funzioni al VB.
L'help in merito alle funzioni non è per me sufficientemente chiaro.
In particolare, all'interno della function, come faccio a capire se un
determinato argomento è stato passato o meno?
Più in generale, dove posso trovare esempi che chiariscano le varie
possibilità degli argomenti delle function?
Grazie e saluti.
Sauro

 ha scritto nel messaggio
news:_qQf8.47393$v7.17...@twister1.libero.it...


 ha scritto nel messaggio
news:_qQf8.47393$v7.17...@twister1.libero.it...

Ciao Sauro, lieto di rivederti qui sull'ng, penso di aver trovato qualcosa
che ti può essere di aiuto nel caso da te specificato, da notare che secondo
msdn (vedi in fondo) è consigliato passare un valore speciale definito in
precedenza per specificare che non si desidera passare alcun valore.
Ciao
Funzione IsMissing
Restituisce un valore Boolean che indica se unargomento Variant facoltativo
è stato passato a unaroutine.
Sintassi
IsMissing(nomearg)
L'argomento obbligatorio nomearg contiene il nome di un argomento Variant
facoltativo di una routine.
Osservazioni
La funzione IsMissing viene utilizzata per determinare se un argomento
Variant facoltativo è stato specificato nella chiamata di una routine.
IsMissing restituisce True se nessun valore è stato passato per l'argomento
specificato, in caso contrario restituisce False. Se la funzione IsMissing
restituisce True per un argomento, l'utilizzo dell'argomento mancante in
altre parti del codice può generare un errore definito dall'utente. Se la
funzione IsMissing viene utilizzata per un argomento ParamArray, restituisce
sempre False. Per individuare un ParamArray vuoto, controllare se il limite
superiore dellamatrice è minore del limite inferiore.
Nota   La funzione IsMissing non può essere utilizzata per tipi di dati
semplici quali Integer o Double poiché, a differenza dei tipi di dati
Variant, per tali tipi di dati non è disponibile un bit per il flag
"mancante". Nella sintassi degli argomenti facoltativi è pertanto possibile
specificare un valore predefinito. Se l'argomento viene omesso quando si
richiama la routine, verrà quindi impostato tale valore predefinito, come è
illustrato nell'esempio seguente:
Sub MySub(Optional MyVar As String = "specialvalue")
    If MyVar = "specialvalue" Then
       ' MyVar è stato omesso.
    Else
    ...
End Sub
In molti casi è possibile non utilizzare la prova If MyVar impostando come
valore predefinito il valore che si desidera venga attribuito a MyVar se
l'utente lo omette dalla chiamata di funzione. In questo modo è possibile
aumentare il livello di efficienza del codice.

 viene chiamata, ti riferisci ai parametri optional?
Quotare please!
Se non sai cosa significa leggiti il manifesto che si trova all'interno del
sito comune di questo News Gropup
http://www.it-lang-vb.net/
Ciao


Ho trovato anche questo
Uso VB4 edc ho questo problemino (scusatemi l'eventuale banalita')
Ho dichiarato una sub con un parametro optional
Public Sub MySub(par1 As String, Optional par2 As Variant)
    Dim msg As String
    If Not IsNull(par2) Then
        msg = " Optionale Passato"
    Else
        msg = " Optionale Mancante"
    End If
    msgBox msg
End Sub
ovviamente se la chiamo con tutti e due i parametri funziona bene ma
se la chiamo con SOLO il primo parametro mi da il medesimo risultato, come
faccio da DENTRO la MySub a sapere che mi e' stato passato SOLO il primo
parametro ?
Risposta
Sostituisci IsNull con  IsMissing se l'argomento è Variant
mentre
If par2 <> 0 Then  se par2 è integer
If par2 <> "" Then  se par2 è string
ecc.
Ciao Andrea

 > 1) se il parametro non è optional va passato per forza o la funzione non


 l'operazione necessaria ovvero evita di fare il maestrino.
Quindi quando si porta dietro firme multilinea e una ventina di righe senza
attinenza alla risposta (come nel tuo msg precedente) che rendono insensata
e contraddittoria anche la risposta, oltre occupare inutilmente banda, è
concesso?
(secondo te è più chiara una risposta come questa o come la tua _senza_
quoting?)
Ciao


Lascia perdere:
tempo sprecato:
questo lo conosco da tempo...
Fa parte della categoria "Dei scesi in terra per insegnare a noi rozzi
plebei"....
ciao
ugo

 viene chiamata, ti riferisci ai parametri optional?
Si, certo.
L'oggetto mi sembrava sufficientemente chiaro.
Ciao, Sauro

 determinato argomento è stato passato o meno?
[SNIP]
Se il parametro e' definito come Variant, esiste la funzione IsMissing, come
ti hanno gia' suggerito; per quanto riguarda gli altri tipi di dato, il
parametro mancante assume invece
- il valore "nullo" del tipo specifico (0, stringa vuota, Nothing ecc...)
oppure
- il valore di default che hai assegnato al parametro stesso
Il primo caso penso sia sufficientemente chiaro, per il secondo devi usare
la sintassi descritta nella guida (nota il 'defaultvalue'..)
[Optional] [ByVal | ByRef] [ParamArray] varname[( )] [As type]
[= defaultvalue]
che tradotta in soldoni diventa:
Sub Test(Optional ByVal Param As Integer = -9999)
If Param = -9999 Then
    Debug.Print "Parametro mancante"
Else
    Debug.Print "Parametro presente"
End If
End Sub
Ciao
--
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown