Operador único if vs ternario: rendimiento

Aug 20 2020

Necesita algo de comprensión con respecto al rendimiento cuando se usa un operador ternario vs if individual.

Creo una instancia contenedora en la que inicializo sus variables. Por ejemplo, a continuación:

public class MyWrapperClass{
    public string sUserName;
    
    public MyWrapperClass(){
        this.sUserName = '';
    }
}

Ahora, mientras asigno los valores devueltos por el back-end a las variables contenedoras, uso un solo if para verificar si el valor devuelto por el back-end no está en blanco. A continuación se muestra lo que hago:

if(String.isNotBlank(myObj.myField__c)){
    myWrapperInstance.sUserName  = myObj.myField__c;
}

No tengo una condición else aquí porque ya inicialicé la variable como una cadena vacía y, por lo tanto, si no existe ningún valor para el campo, entonces mi variable contendría una cadena vacía.

Sin embargo, necesito entender si tiene sentido usar a continuación:

myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : '';

O

myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : '';

Necesito ayuda para comprender qué es lo mejor de los dos desde el punto de vista del rendimiento.

Respuestas

6 DavidReed Aug 20 2020 at 04:58

Estas formas:

myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : myObj.myField__c;

y

myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : myObj.myField__c;

son manzanas con naranjas. String.isNotBlank()no solo busca null, sino también cadenas vacías y con espacios en blanco, lo cual es más costoso computacionalmente que verificar null. Utilice el que necesite para sus requisitos específicos, ya que no son equivalentes al rendimiento.

Además, ambos deben optimizarse tal como están escritos si el compilador de Apex es moderadamente inteligente, porque la comparación da como resultado el mismo resultado. (Aunque sospecho que es solo un error en su ejemplo).

En cuanto a si el operador ternario o una ifdeclaración es más rápido: como comentó Derek F., no importa. El impacto en el rendimiento, si lo hay, y nuevamente, si el compilador de Apex es inteligente, no debería haber ninguna diferencia en absoluto, se verá completamente abrumado por otras características de rendimiento de su aplicación, y será indefinido / sujeto a cambios en futuras versiones de Salesforce. . No se preocupe por eso.