Newsgroup: it.comp.lang.visual-basic
Titolo: Ismissing, Help ambiguo ?

Premesse:
- VB5 SP3
- L'help di IsMissing dice:
 "Restituisce un valore Boolean che indica se un argomento
 Variant facoltativo è stato passato a una routine."
Ma poi, nell'esempio, precisa:
 "In questo esempio la funzione IsMissing viene utilizzata
 per verificare se un argomento facoltativo è stato passato
 ad una routine definita dall'utente. Si noti che per gli
 argomenti Optional è ora possibile impostare valori
 predefiniti e tipi diversi da Variant."
Da notare che è una delle modifiche inserite nell'SP3.
Ora provate questo codice:
*****************************
Sub Provetta(Optional Par1 As Variant, Optional Par2 As Long, Optional Par3 As Boolean)
If IsMissing(Par1) Then
Debug.Print "Par1 Manca"
Par1 = "Arturo"
End If
If IsMissing(Par2) Then
Debug.Print "Par2 Manca"
Par2 = 100
End If
If IsMissing(Par3) Then
Debug.Print "Par3 Manca"
Par1 = True
End If
Debug.Print Par1, Par2, Par3
End Sub
*****************************
Ora chiamate Provetta senza aggiungere parametri.
Cosa vi sareste aspettati e cosa avete ottenuto ?
*****************************
Intendiamoci, workaround ce ne sono, ma perché cavolo IsMissing
debba funzionare solo con Variant anche se è possibile passare
parametri Optional di qualunque tipo, proprio non lo capisco.
Solo perché in realtà testa Null, che è una possibilità del
Variant, ma non degli altri tipi ?
Era solo pigrizia dei programmatori di VB ?
O magari succede solo con VB5 ?
Bye, G.

 Cosa vi sareste aspettati e cosa avete ottenuto ?
Accade anche in VB6 Sp5: Solo le Variant possono essere significativamente
utilizzate con IsMissing
Creco che si sarebbe potuto fare di meglio (quindi voto per la pigrizia), ma
una "possibile" spiegazione è in fondo a questo Help:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/modcore/htm
l/deconUsingOptionalArguments.asp

 l/deconUsingOptionalArguments.asp
Però quella non è una spiegazione, è solo documentare il fatto...
Appropo', proveresti per favore anche a fare un Debug.Print Par1 ?
A me _stampa_ la stringa "Errore 448", ma non crea nessun errore
intercettabile. :-((
Comunque, credevo di sapere a memoria la guida, e invece :-((
è documentato che è possibile fare:
Sub Provetta (Optional Par1 As Long = 12345)
per dare un valore di default ad un'optional non variant.
Vabbe', basta saperlo...
Però mi piacerebbe lo stesso sapere cos'è quell'"Errore 448".
O meglio, perché esce come stringa, invece che creare l'errore ?
Già la definizione dell'errore non è che sia molto chiara. Quel
"...controllare l'ortografia", poi :-((
[POLEMICO]
A proposito di Help, perché secondo il mio help il metodo Print
si applica solo all'oggetto Debug ? In effetti non c'è nell'intellisense...
Però se faccio un form1.Print stampa sul Form, se faccio un
Picture1.Print lo stampa sulla PictureBox.
[/POLEMICO]
Bye, G.

 [/POLEMICO]
Perchè, se ho ben capito, hai VB5. A me, cercando nell'help di VStudio (non
MSDN library), Print, Metodo in "Si applica", mi elenca Debug, Form,
UserControl. Come vedi anch'io non sto molto meglio (per esempio manca
Printer)

 O magari succede solo con VB5 ?
    Secondo me non ti e' chiaro che il mondo dei tipi di vb e' diviso in due
mondi *separati* nei quali vigono regole diverse. Questi due mondi
comunicano per mezzo delle funzioni di conversione.
--
Ciao.
Maurizio
--------
?SPQR(C)
 X
--------

 [/POLEMICO]
Questo non si è mai capito :)
Ciao

 comunicano per mezzo delle funzioni di conversione.
Probabile... anzi sicuro. Diciamo che ne ho giusto una vaga
idea, che le tue parole contribuiscono a cristallizzare.
Sarà che di solito evito le Variant come la peste, dichiaro
sempre le variabili con tipo e faccio affidamento solo sulle
conversioni esplicite... probabilmente questo mi ha evitato
finora di sbattere contro l'interfaccia tra i due mondi, ma
prima o poi doveva capitare.
Grazie, G.

 Questo non si è mai capito :)
Ah, ecco :-)
Grazie delle spiegazioni, G.

Ah, ecco :-)
Aggiungerei che non e' neppure documentato per davvero :-(
Nell' articolo (che piu' che un PRB concordo sul fatto che sia una CZT):
PRB: Print Method Does Not Appear in the Object Browser Window or Auto List Members Feature 
Q298135
viene fornita questa spiegazione:
The Object Browser window only displays objects and their associated methods. 
Methods such as Print are not associated with Printer, Form, or UserControl objects. 
Instead, they are general methods that Visual Basic attaches to these objects. 
Because they are not intrinsic methods, they are not displayed in the browser or by IntelliSense.
Imho, la dice lunga sulla coerenza seguita nella progettazione del linguaggio :-(
-- 
ciao, hal

 Because they are not intrinsic methods, they are not displayed in the browser or by IntelliSense.
Oh, be'... :-(
Quei plurali... quali altri metodi sono ? Hai già visto o cerco io ?
Un Paperino che ha bisogno di ferie.

 IntelliSense.
Tradotto: ci hanno messo una pezza tramite accrocchio.
Ciao