Singolo se vs operatore ternario - prestazioni
È necessaria una certa comprensione delle prestazioni quando si utilizza un singolo operatore if vs ternario.
Creo un'istanza wrapper in cui inizializzo le sue variabili. Ad esempio sotto:
public class MyWrapperClass{
public string sUserName;
public MyWrapperClass(){
this.sUserName = '';
}
}
Ora, mentre assegno i valori restituiti dal back-end alle variabili wrapper, utilizzo un singolo if per verificare se il valore restituito dal back-end non è vuoto. Di seguito è quello che faccio:
if(String.isNotBlank(myObj.myField__c)){
myWrapperInstance.sUserName = myObj.myField__c;
}
Non ho un'altra condizione qui perché ho già inizializzato la variabile come una stringa vuota e quindi se non esiste alcun valore per il campo, la mia variabile conterrebbe una stringa vuota.
Tuttavia, devo capire se ha senso utilizzare di seguito:
myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : '';
O
myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : '';
Ho bisogno di aiuto per capire qual è il migliore dei due dal punto di vista delle prestazioni?
Risposte
Queste forme:
myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : myObj.myField__c;
e
myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : myObj.myField__c;
sono mele-arance. String.isNotBlank()
non controlla semplicemente null
, ma anche stringhe vuote e di tutti gli spazi, che è più costoso dal punto di vista computazionale del controllo null
. Usa quello che ti serve per i tuoi requisiti specifici, poiché non sono equivalenti alle prestazioni.
Inoltre, entrambi dovrebbero essere ottimizzati come scritti se il compilatore Apex è moderatamente intelligente, perché il confronto produce lo stesso output. (Sospetto che nel tuo esempio sia solo un errore, però).
Quanto al fatto che l'operatore ternario o if
un'affermazione siano più veloci: come ha commentato Derek F., non importa. L'eventuale impatto sulle prestazioni - e di nuovo, se il compilatore Apex è intelligente, non dovrebbe esserci alcuna differenza - sarà completamente sommerso da altre caratteristiche delle prestazioni dell'applicazione e non definito / soggetto a modifiche nelle versioni future di Salesforce . Non ti preoccupare.