Newsgroup: it.comp.lang.visual-basic
Titolo: [neofita] Chiarimento in condizione If..

Vi sottopongo i seguenti due casi:
1) If (x>0) then...
2) If Not (x<0) then..
Le suddette istruzioni sono equivalenti, vorrei sapere se, ci potrebbe 
essere un vantaggio, in qualche caso, nel preferire una delle due.
-- 
Ciao e grazie a tutti
Pippo 

essere un vantaggio, in qualche caso, nel preferire una delle due.
 If Not (x<0) then   obbliga il compilatore a mettere un NOT in più, quindi
programma + lungo e + lento.
--
ciao
  Stefano

 ha scritto nel messaggio 
news:0010s3ta23jbm44qa...@4ax.com...


Ho notato pero' che, ci sono casi (
http://tinyurl.com/2wnmae
) in cui, viene 
utilizzata l'istruzione del tipo:
If Not(....) then....
Puoi darmi qualche ulteriore chiarimento? ;-)
Ciao e grazie milleeeeee
Pippo 

 essere un vantaggio, in qualche caso, nel preferire una delle due.
Le due espressioni non sono uguali:
If (x>0) then... 'il valore minimo virgola a parte è 1
If Not (x<0) then.. 'il valore minimo virgola a parte è 0
--
Ciao Fede
By Chicco Production
http://www.webalice.it/bychicco/

Scusate mi sono impapinato...


 essere un vantaggio, in qualche caso, nel preferire una delle due.
Forse volevi dire
2) If Not (x<=0) then...
(perché "Not (x<0)" equivale a "(x>=0)")
Come vengano poi trattati i 2 casi a livello di prestazioni dipende anche 
dal compilatore. Non tutti inseriscono il "not" in più.
Anzi, secondo me quasi nessuno.
Ad es. con .NET si ottiene lo stesso identico IL (intermediate language), 
con C++ si ottiene lo stesso codice assembly.
A parte questo, secondo me l'unico vantaggio sicuro potrebbe essere la 
leggibilità del codice.
Bye
Raf 

 Ad es. con .NET si ottiene lo stesso identico IL (intermediate language)
Esatto. Sbirciando con Reflector si vede che
If Not (x < 0) Then
dal compilatore viene interpretato come
If (x >= 0) Then
Quindi non c'è nessuna differenza a livello di codice compilato.
-- 
news:it-alt.comp.software.openoffice : Il newsgroup dedicato a
OpenOffice.org, la suite open source di applicazioni per ufficio.
Saluti, VITRIOL

 leggibilità del codice.
Come gia' evidenziato, in questo stesso thread, ho notato che, ci sono casi 
(
http://tinyurl.com/2wnmae
) in cui, viene
utilizzata l'istruzione del tipo:
If Not(....) then....
.... quindi e' solo per una questione di leggibilita'? ;-)


Anzi, secondo me quasi nessuno.
Io avevo presente prove fatte sul QuickBasic, e li la "short circuit evaluation"
non era implementata.
Che vuoi farci, sono antico...
Poi i compilatori si sono fatti piů furbi  ed effettivamente hanno superato il
problema
http://en.wikipedia.org/wiki/Short-circuit_evaluation
--
ciao
  Stefano

 essere un vantaggio, in qualche caso, nel preferire una delle due.
Ti hanno già fatto notare che le due forme non sono proprio uguali uguali.
I compilatori in generale sono concepiti in modo da ottimizzare il codice 
nei casi più comuni, quindi la probabilità che le due forme vengano 
compilate alla stessa maniera è piuttosto alta.
E' anche per questo che scrivere codice complicato o "strano" non è una cosa 
di cui vantarsi. E' meglio scrivere codice semplice, perfino banale, che sia 
ottimizzabile dal compilatore (e facilmente comprensibile da noi, il che non 
è un vantaggio da poco) il quale, verosimilmente, conosce l'architettura su 
cui stiamo sviluppando un po' meglio di noi stessi.
S. 

 Scusate mi sono impapinato...
'na volta che ci avevi azzeccato... :-P
A proposito di quel "virgola a parte": è un'ottima dimostrazione
del perché si debbano sempre dichiarare esplicitamente le
variabili; se ci fosse stato un
    Dim X As [Single|Double|Decimal|Currency]
o un
    Dim X As [Long|Integer]
il dubbio non si sarebbe posto: la virgola ci sarebbe stata,
oppure no.
E se X fosse stata per caso dichiarata come Boolean, che
numericamente si converte in 0 (False) e -1 (True), la logica
di quelle espressioni sarebbe miseramente fallita.
Bye, G. 

 Bye, G.
Ciao ti ringrazio per non avermi aggredito!
