Per quanto riguarda le prestazioni: in un linguaggio completamente compilato come C o C ++, con le ottimizzazioni attivate, la differenza è probabilmente zero. In altri linguaggi (interpretati, byte-code-compilati, o jit-compilati) ci può essere una differenza, ma 1. non sarà molto e 2. non sarà il collo di bottiglia. Ci sono delle eccezioni, ma quelle sono rare, e se ne incontrate una, probabilmente state armeggiando con profiling a grana fine e ottimizzazioni a livello di istruzioni; in tutti gli altri casi, sarà abbastanza veloce.
Pertanto, come sempre, la prima scelta dovrebbe essere ottimizzare la leggibilità, non le prestazioni di runtime . Il che ci porta alla domanda quando dovresti usare l'una o l'altra; bene, le opinioni divergono. Un campo dice che l'operatore ternario semplicemente non dovrebbe essere usato affatto, per carità; e hanno certamente un punto, perché ha la tendenza a creare one-liner davvero complicati, specialmente se lo annidate, ma anche perché la sua precedenza può portare a risultati indesiderati. Tuttavia, penso che ci siano situazioni in cui un operatore ternario rende il codice più leggibile, e non vedo nulla di sbagliato nell'usarlo in una tale situazione; un esempio da manuale è un testo semplice che pluralizza:
printf("%i %s deleted.", num_files, (num_files > 1) ? "files" : "file");
Lo stesso codice scritto con un'istruzione esplicita if
avrebbe preso 5 righe aggiuntive senza contribuire in modo sostanziale alla leggibilità.
Detto questo, IIf
in VB ha un avvertimento sgradevole: a differenza di If
, che è un'istruzione linguistica corretta e valuta solo un ramo, IIf
è una funzione built-in, quindi entrambi i rami vengono valutati, no importa quello che dice la condizione. Fintanto che i rami non hanno effetti collaterali, non te ne accorgi, ma quando lo fanno, ti viene in mente un serio face-palming.