Newsgroup: it.comp.lang.visual-basic
Titolo: [?] sintassi

della serie dubbi e domanduzze della notte:
in vb-accelerator ho trovato
   If Not (sI = "") Then
io userei
    if sI <> "" then
la prima forma ha vantaggi sulla seconda ? quali ?
tia, pal

 la prima forma ha vantaggi sulla seconda ? quali ?
Mhmmm... e poi ti metti a ghettizzare me, Roal e tutti i programmatori
Delphi?
Mi vien da ridere...
Cmq, la prima forma è semplicemente + leggibile della seconda (ma è una
questione di gusti), ovviamente non ci sono differenze di funzionamento.
Io, in generale, sceglierei la prima ma dipende dalla logica che ci sta
sotto:
If Not Enabled    ha è un po' + significativo di    If Enabled=false
ma se dovessi controllare una stringa userei la seconda
If Stringa<>'Andrea' Then
ripeto, è una questione di leggibilità del codice, forse la cosa migliore
sarebbe mantenere uno standard (ovvero scegliere di usarne sempre una delle
due)...
Ma prima di preoccuparsi di queste sottigliezze direi che è meglio imparare
a scrivere codice leggibile stando attenti a 1000 altre cose...
Ciao :-)
--
(¯`·.¸¸.·´¯`·.¸¸.-> Andrea <-.¸¸.·´¯`·.¸¸.·´¯)
AntiSpam: rimuovere il trattino basso dall'indirizzo per rispondere
AntiSpam: remove the underscore from the e-mail address to reply

 a scrivere codice leggibile stando attenti a 1000 altre cose...
concordo perfettamente, anche se la primissima mi sembra sia imparare a
scrivere codice funzionante :)
detto questo, ogni forma di ragionamento sullo scrivere e' benvenuta.
ciao, a.
--
andrea dot palazzi at tin dot it
free vb/sw: 
http://www.comune.modena.it/cittadini/apal/html/

tia, pal
Io invece userei
    If Len(sl)>0 then
Ha un'esecuzione più veloce in quanto l'if opera su un intero anzichè su
stringhe, che dopo i variant sono il tipo più lento.
(Tra parentesi... anzichè "" userei tra l'altro vbNullString, ma questa è
solo una questione di gusti)
Ciao

 a scrivere codice leggibile stando attenti a 1000 altre cose...
Quest'ultimo argomento mi interessa (e le 1000 cose mi fanno gola). Che
"stile" segui per migliorare la leggibilita' del codice? Fai riferimento a
qualche testo in particolare? Lavori in un team che si e' dato delle regole
di stesura?
--
Ciao.
Maurizio

 solo una questione di gusti)
Nella Guida di VB4, alla voce "Istruzione Declare", si dice:
"In Visual Basic è disponibile la costante vbNullString, utilizzabile per la
chiamata di routine esterne quando la routine esterna richiede una stringa
di valore zero. Una stringa di valore zero non equivale ad una stringa di
lunghezza zero ("")."
E, nel visualizzatore oggetti:
"Constant for use when calling external procedures requiring a string whose
value is zero."
Questo mi aveva portato ad evitare l'uso che ne fai. Non hai mai riscontrato
problemi?
--
Ciao.
Maurizio

problemi?
In effetti è una sottigliezza.
Solo una volta ho riscontrato problemi: in VB4 16bit se settavo una cella di
una Grid a vbNullString andava in crash. Lo stesso progetto sotto VB4 32bit
funzionava benissimo.
Per il resto mai avuto problemi, e giustamente le api andrebbero tutte usate
con vbNullString e non con "" (come sarebbe consigliabile usare 0& anzichè
0).
Ciao

 stringhe, che dopo i variant sono il tipo più lento.
Sicuro che, fra l'overhead della chiamata a Len e la sua implementazione,
non ci perdi?
Va beh, cmq il tempo di esecuzione di Len dubito che sia un granchè elevato
e cmq non si parlava di prestazioni ma di impianto stilistico del codice...
Esistono sistemi [tramite i registri appositi della CPU] che permetteno di
quantificare quanti cicli di CPU si porta via un pezzo di codice... sarebbe
interessante fare un confronto.


 Lavori in un team che si e' dato delle regole di stesura?
No, non lavoro in un team, però ho imparato dai newsgroups che se vuoi far
capire qualcosa a chi sta dall'altra parte devi scrivergli codice pulito e,
soprattutto, _chiaro_ : è inutile farsi belli con le prodezze + difficili...


 interessante fare un confronto.
tipo ?

non ci perdi?
If Len(String) = 0 then impiega circa il 50% del tempo di If String = ""
then
Io lo uso correntemente in quanto mi sembra comunque più elegante usare
numeri che <"">, e se già che ci sono ci posso anche guadagnare...
Inoltre If String <> "" lo si può convertire anche in If Len(String) then
anzichè If Len(String)>0 in quanto un valore diverso da 0 sarà interpretato
come true.
Ciao

 Beh, le "regole" sono molte e cmq molto soggettive...
[...]
Tutto chiaro, grazie.
--
Ciao.
Maurizio

 come true.
e se un giorno ti cambiano questa peculiarità del basic?



E se un giorno eliminassero i Variant?
O decidessero che si usa il := come in pascal anzichè l' =?
O che l' = negli if si debba scivere == come in C?
La vita è una tempesta ma prenderla in c*** è un lampo :)
Ciao

 La vita è una tempesta ma prenderla in c*** è un lampo :)
notevole. tuo o citato ? :)

notevole. tuo o citato ? :)
Beppe Grillo

 di stesura?
A parte ciò che ti ha già detto Andrea Magni e che è ampiamente
condivisibile, io applico queste regolette:
- Dare solo nomi italiani alle funzioni, alle sub e alle variabili. In
questo modo è facile capire cosa hai scritto tu e cosa fa invece riferimento
a funzionalità di OCX esterni o di Visual Basic.
- Durante la dichiarazione delle variabili, fare precedere il nome da GLO se
è globale, GM se è dichiarata a livello di modulo, e comunque inserire
sempre una lettera che tipizzi la variabile. Inoltre usare il maiuscolo per
separare le iniziali delle parole che compongono i nomi:
es: GMsNomeFile = variabile stringa dichiarata a livello di modulo che
contiene il nome del file.
Usare dei prefissi standard anche per i controlli (uno fisso per ogni
tipologia di controllo utilizzato), i type, le classi, e le form. Io ho una
mia tabellina, ma è troppo lunga per postarla qui.
- Usare una tipologia di commenti standard all'inizio di ogni sub/funzione
che contenga le seguenti informazioni:
  - Descrizione della funzione
  - Data di ultima modifica e nome di chi ha eseguito l'ultima modifica
  - Parametri utilizzati, con eventuali valori di default e range permessi.
  - Valori di ritorno con indicazione di tipo ed eventuale default
  - Esempio di chiamata
  (a dire il vero non riesco sempre a restare fedele a questo standard...
8-))
- Usare una gestione errore centralizzata che scriva il tipo di errore su un
file di log e chieda all'utente se deve continuare o terminare l'esecuzione
del programma.
- Durante l'editing del codice mantenere sempre acceso il caps-lock. In
questo modo quando hai finito di editare la riga ti accorgi subito se le
variabili che hai scritto sono dichiarate o meno (durante la dichiarazione,
il caps-lock va spento).
Al momento non mi viene in mente altro.
Ciao
*Roby*
P.S.
Se qualcuno ha qualcos'altro da aggiungere, lo faccia. L'argomento mi pare
meritevole.




 O che l' = negli if si debba scivere == come in C?
(non so in C, ma in Java[script] ha un suo senso il doppio uguale. Non è una
diversità, ma piuttosto una vera e propria mancanza del VB, dato che l'uguale
singolo c'è, e si può usare negli if, anche se ha un significato molto diverso)
Quel ":=" mi ricorda qualcosa... e in VB si usa eccome...
Colgo l'occasione per chiedere: ma come avrei fatto io a sapere che una funzione
si può chiamare sia così:
funzione("primo", "secondo")
che così:
funzione parametro1:="primo", parametro2:="secondo"
[tra l'altro comodissimo perchè permette di cambiare ordine ai parametri]
...dicevo, come avrei fatto, se VBA per Word le macro non me le registrasse in
questo formato?
E mi voglio rovinare:
 - perchè cavolo Form.Print("testo") non è documentata??? (dal visualizzatore
oggetti punto Print, nell'oggetto Form, e indovinate che topic salta fuori?
Debug.Print)
 - perchè per scoprire che un punto e virgola dopo Print #1, "testo" impedisce
l'a capo automatico, ho dovuto leggerlo di striscio sul NG (mentre nella guida
di QuickBasic il tutto è spiegato con insolita [e gradita] chiarezza)?
 - perchè non c'è scritto da nessuna parte che GET non piglia solo un byte, ma
tutti quelli che servono a riempire il buffer? e perchè non dice da nessuna
parte che l'avanzamento delle funzioni Input/Output è automatico?

 tipo ?
Esiste un registro che contiene il numero di cicli macchina eseguiti da
quando questa è stata avviata...
Leggendo il valore prima e dopo la funzione da "cronometrare" e facendo la
differenza puoi sapere quanto essa è impegnativa...
Piccolo dettaglio: penso che,con l'interprete di VB in mezzo ai piedi,
potrebbe non essere attendibile...


 O che l' = negli if si debba scivere == come in C?
Ehi, non assolutizzare le mie affermazioni! :-/
Dico che se un domani ti dicono che Boolean non è + compatibile con Integer
sei a terra, e non è una previsione troppo campata in aria [ci manca un
missile terra-aria e siamo a posto ;-) ]...


missile terra-aria e siamo a posto ;-) ]...
Da che esiste l'informatica un valore = 0 è falso e <> 0 è vero.
Daccordo che VB non segue molto le regole ma fin qui ancora ci siamo (in
delphi però Boolean e Integer non sono compatibili... stano mi sembrava che
in Pascal lo fossero), comunque se il problema è tutto qui quando con VB9
ricompilerò il progetto e mi darà errore convertiro il mio Len(s) in
Len(s)>0.
Fossero tutti qui i problemi... :)
Ciao

 l'a capo automatico, ho dovuto leggerlo di striscio sul NG
Una delle parti meno documentate e conosciute è comunque la gestione
all'interno dell'IDE di VB.
Ad esempio, tu lo sapevi che:
- CTRL+J porta in primo piano il controllo sorrente e CTRL+K lo porta in
secondo piano
- CTRL+Tasto freccia sposta il controlo corrente e SHIFT+Tasto freccia lo
ridimensiona (utilissimo quando il controllo sta sotto ad altri controlli,
tipo una label sotto una picturebox)
- per copiare una immagine contenuta in un controllo (per esempio la picture
di una picturebox) bisogna posizionarsi sulla proprietà Picture, selezionare
col mouse la scritta (bitmap) e premere CTRL+C. A questo punto l'immagine
sta nella clipboard di windows. Con CTRL-V la puoi copiare invece dalla
clipboard alla picture.
- per riordinare i tabstop, il sistema + veloce consiste nel posizionarsi su
quello che si vuole sia l'ultimo e inserire 0 nella proprietà TabIndex. Poi
si procede all'indietro, selezionando il penultimo, il terzultimo e così
fino al primo, e in ognuno si inserisce sempre 0 nella proprietà tabindex.
Ad ogni 0, VB si preoccupa di rinumerare tutti gli altri mantenedo l'ordine
prescelto.
- E' possibile avere a disposizione lo strumento "Commenta tutto il blocco
selezionato" e "Decommenta tutto il blocco selezionato", premendo il tasto
destro del mouse sulla barra degli strumenti VB e selezionando la barra
"Modifica"
Ciao
*Roby*
P.S.
Se ne hai altri, dilli. Qualcuno volonteroso potrebbe tenere una lista
aggiornata e magari pubblicarla sul sito.

Beccati questa, allora: mentre stai disegnando un controllo, tieni premuto il
tasto CTRL (e non mollarlo). Quando avrai finito di disegnare, l'icona del
controllo NON verrà deselezionata, in pratica potrai continuare a disegnare lo
stesso tipo di controllo tutte le volte che vuoi senza mai dover riselezionare
l'icona nella casella strumenti. Letto in una specie di "Trucchi e segreti", non
ricordo l'indirizzo

 GetTickCount()?
Anche, ma io propenderei molto per il registro delle istruzioni (un registro
direttamente della CPU)...
ciao :-)


 Fossero tutti qui i problemi... :)
Non condivido assolutamente questo modo puerile di affrontare i problemi.
Detto questo, non sta a me dirti come programmare...
Senza polemica,


 Dimmene uno migliore sotto Win...
GetTickCount()?

Detto questo, non sta a me dirti come programmare...
Mah, forse dovrei darmi alla fisica, in quel campo (forse) sarei sicuro che
le regole non cambiano (le mele cadono sempre dagli aberi verso chi sta più
sotto), ma non vedo assolutamente nulla di irregolare nel mio pensiero: è
sempre stato così per tutta la storia dell'informatica, non vedo perchè
adesso per me diventa puerile... mah... e magari tu sei uno di quelli che
passano i long alle api come MyApi(0) rischiando il crash anzichè MyApi(0&)
o fa indistintamente a = 1 * 1.5 quando sarebbe meglio specificare a = 1# *
1.5# dato che altrimenti VB considera 1 come integer e 1.5 come single.
Ciao. Non mi piace polemizzare, ma neanche venire aggredito senza motivo.

ciao :-)
In VB?
E comunque la GetTickCount() come la useresti se non all'inizio e alla fine
di un ciclo? Non dirmi che la controlleresti su una sola operazione! in un
abiente multitasking poi...  QUESTO sarebbe veramente da suicidio
Ciao

 Ciao. Non mi piace polemizzare, ma neanche venire aggredito senza motivo.
I motivi per mettere in crisi quello che sostieni ci sono eccome... e li hai
esposti tu stesso, probabilmente non ti sei neanche accorto di cosa stai
scrivendo di te...
La mia non voleva essere un'aggressione, cerco sempre di creare un dialogo
costruttivo con chiunque, il problema è che ogni tanto si incontra gente con
cui questo non sembra possibile...
Detto questo, visto che cmq non ti conosco e che cmq non sta a me farlo, non
me la sento di dare un giudizio sulla tuo modo di programmare. Semplicemente
non lo condivido, tutto qua, pensi di poter sopravvivere all'idea?


 abiente multitasking poi...  QUESTO sarebbe veramente da suicidio
Ho già detto che io propendo + per la soluzione dei cicli macchina...
Cmq sappi che le priorità dei processi e dei thread possono essere alzati a
livelli decenti sebbene la granularità dei livelli di priorità sia
decisamente grossa...
E cmq, _ripeto_ non si parlava di velocità di esecuzione bensì di stile del
codice.
Lo so che non riesci a fare a meno di andare sul concreto ma cerca di
astrarre un po' il concetto di informatica che hai: non ci sono solo "uni e
zeri"...
Sul presunto multitasking di Windows ci sarebbe molto da dire ma direi che
scivoleremme nell'abisso dell' OT OT OT....
Saluti :-)


non lo condivido, tutto qua, pensi di poter sopravvivere all'idea?
Ma tu, lo sai come programmo io?
Hai mai visto un mio programma?
Mi sembra che chi ha iniziato a dare giudizi campati per aria sei stato
proprio tu.
Visto che tanto a te di VB non frega niente non continuerò a caricare il NG
di messaggi inutili per rispetto verso chi VB lo usa per lavoro o
semplicemente per passione.

Sul presunto multitasking di Windows ci sarebbe molto da dire
Completamente d'accordo
Ciao

 Java, che è il più grosso bidone degli ultimi anni.
visto che tu non parli mai per dar aria alla bocca: perche' ?
ciao, a.

> 3) Java compilato come exe stand-alone è lentissimo che sembra girare su un
Ma va'? Anche gli EXE ci puoi fare?