Opérateur unique si vs ternaire - performances

Aug 20 2020

Besoin de comprendre les performances lors de l'utilisation d'un seul opérateur if vs ternaire.

Je crée une instance de wrapper dans laquelle j'initialise ses variables. Par exemple ci-dessous:

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

Maintenant, pendant que j'attribue les valeurs renvoyées du back-end aux variables wrapper, j'utilise un seul if pour vérifier si la valeur renvoyée par le back-end n'est pas vide. Voici ce que je fais:

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

Je n'ai pas de condition else ici car j'ai déjà initialisé la variable en tant que chaîne vide et, par conséquent, si aucune valeur n'existe pour le champ, ma variable contiendrait une chaîne vide.

Cependant, je dois comprendre s'il est judicieux d'utiliser ci-dessous:

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

OU

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

J'ai besoin d'aide pour comprendre quel est le meilleur des deux du point de vue de la performance?

Réponses

6 DavidReed Aug 20 2020 at 04:58

Ces formulaires:

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

et

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

sont des pommes aux oranges. String.isNotBlank()ne vérifie pas simplement null, mais aussi les chaînes vides et entièrement blanches, ce qui est plus coûteux en calcul que la vérification null. Utilisez celui dont vous avez besoin pour vos besoins spécifiques, car ils ne sont pas équivalents aux performances.

En outre, ces deux éléments doivent être optimisés tels qu'ils ont été écrits si le compilateur Apex est modérément intelligent, car la comparaison aboutit au même résultat. (Je soupçonne que ce n'est qu'une erreur dans votre exemple, cependant).

Quant à savoir si l'opérateur ternaire ou une ifinstruction est plus rapide: comme l'a commenté Derek F., cela n'a pas d'importance. L'impact sur les performances, le cas échéant - et encore une fois, si le compilateur Apex est intelligent, il ne devrait pas y en avoir de différent - sera à la fois complètement submergé par d'autres caractéristiques de performance de votre application et indéfini / sujet à changement dans les futures versions de Salesforce . Ne t'inquiète pas.