Newsgroup: it.comp.lang.visual-basic
Titolo: Prestazioni If e IIF

Ciao a tutti.
Sto rimettendo le mani su di un software, e poichè mi ritrovo ad avere una 
merea di If - Then - Else  pensavo di sostituirli tutti con IIF....
Documentandomi un po, mi pare di aver visto che la IIf è molto meno 
performante della IF-Then.
ho eseguito alcuni test, utilizzando la QueryPerformanceCounter, e, se ho 
ben capito come usarla, ho ottenuto questi risultati:
If semplice --> circa 5,5 microsecondi
IIf--> circa 15 microsecondi, 3 volte + lento.
Vorrei un consiglio: Tenendo conto che questa marea di IF non è all'interno 
di cicli ( o comunque di parte del codice critico) ,  è bene usare l'If 
prediligendo la velocità del codice, o l'IIf prediligendo la leggibilità?
Grazie a chiunque mi voglia rispondere.
Roby. 

 prediligendo la velocità del codice, o l'IIf prediligendo la leggibilità?
curiosità: perchè iif dovrebbe essere più leggibile dell' if then else?
-- 
Salutoni
Sergio
Per rispondere... togli il group dall'indirizzo
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 ha scritto nel 
messaggio news:d1u487$elv$1...@news.newsland.it...



Personalmente invece lo trovo illeggibile, mentre un normale if..then..else, 
al prezzo di essere piu' prolisso, resta sempre chiaro come il sole.
Per quanto mi riguarda il normale IF e' "moglie piena e botte ubriaca": piu' 
leggibile e piu' veloce (perche' IIF e' una funzione del runtime, non 
un'istruzione nativa) e francamente non vorrei mai trovarmi a smaneggiare un 
codice con solo IIF...
Ciao
-- 
Luca Dormio - 
luca....@tin.it
________________________________
"Marty, non stai ragionando in maniera quadridimensionale"
Dr. Emmett L. Brown

prediligendo la velocità del codice, o l'IIf prediligendo la leggibilità?
Al di la che vedo dura dire che IIf è più leggibile di If...then...
else, IIF è ovviamente più lenta, visto che si trattta di una funzione
(e quindi salva lo stato in stack, assieme ai parametri, esegui la
funzione, recupera dallo stack...)
--
Ciao!
Luca Menegotto

 ha scritto nel messaggio 
news:3afibfF...@individual.net...


 Gian
Mi avete convinto.
Quando una volta facevo programmi in C avevo una struttura simile, e mi
trovavo bene....
Comunque, penso che lo accantonerò anche io.
Ciao.
Roby.

 Comunque, penso che lo accantonerò anche io.
Aggiungo una bella nota a sfavore della funzione IIF:
Le due istruzioni vengono eseguite comunque.
In output viene passata solo quella relativa al valore dell'espresione,
però potrebbe essere già troppo tardi :)
provate questa:
MsgBox IIf(False, 1/0, 1)
oppure questa:
Private Sub Command1_Click()
MsgBox IIf(False, calc, 1)
End Sub
Function calc()
Dim a
For a = 1 To 10000000
    DoEvents
Next
End Function
Se poi calc() eliminasse un file, questo verrebbe eliminato anche se la
condizione fosse falsa!
Insomma, da usare con cautela.
Ovviamente il calo di prestazione è legato proprio a questa doppia
valutazione delle "espressioni" 
termoPilucco
-- 


                    Il 24 Mar 2005, 16:05, 
termoP...@ahah-nono-maddai.it
 (termoPilucco) ha
scritto:

Balena dice che un blocco If...End If si può cortocircuitare con qualche
trucco. Ovviamente con la funzione IIF non si può fare, e entrambi i
risultati vengono sempre valutati, anche se la condizione risulta vera.
Inoltre con l'IIF puoi assegnare dei valori a delle variabili, ma non puoi
eseguire istruzioni, e anche con le variabili ne assegni soltanto una per
volta. Cioè non puoi certo sostituire con una IIF una cosa del tipo
If x > y Then
    a = 1
    lblMain.Caption = "Maggiore"
    Debug.Print x & "; " & y
    txtNome.ForeColor = vbBlack
ElseIf x < y Then
    a = 2
    lblMain.Caption = "Minore"
    Debug.Print y & "; " & x
    txtNome.ForeColor = vbRed
Else
    a = 0
    lblMain.Caption = "Uguale"
    Debug.Print x & "= " & y
    txtNome.ForeColor = vbGreen
End If
Io a volte uso IIF per scrivere codice un po' più compatto (non credo però
che la leggibilità ne guadagni molto), ma ti vorrei ricordare che anche un
blocco If può essere scritto su una sola riga senza End If, come ad esempio
If x > y Then a = 1 ElseIf x < y Then a = 2 Else a = 0
e se hai necessità di scrivere tutto in una sola istruzione disposta su più
righe, puoi sempre andare a capo tutte le volte che vuoi con il carattere
"_", come
If x > y Then a = 1: lblMain.Caption = "Maggiore" _
    ElseIf x < y Then a = 2: lblMain.Caption = "Minore" _
    Else a = 0: lblMain.Caption = "Uguale"
In questi casi, come per l'IIF, credo che la leggibilità migliore non sia
tanto quella dell'istruzione stessa, quanto l'avvicinare il codice
precedente per averlo nella stessa schermata e poterlo tenere d'occhio.
Insomma le soluzioni alternative ci sono. Ciao.
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ha scritto nel messaggio 
news:3afibfF...@individual.net...
