Singolo se vs operatore ternario - prestazioni

Aug 20 2020

È 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

6 DavidReed Aug 20 2020 at 04:58

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 ifun'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.