Tekli ise üçlü operatör - performans

Aug 20 2020

Tek ve üçlü bir operatör kullanırken performansla ilgili biraz anlayışa ihtiyacınız var.

Değişkenlerini başlattığım bir sarmalayıcı örneği oluşturuyorum. Örneğin aşağıda:

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

Şimdi, arka uçtan döndürülen değerleri sarıcı değişkenlere atarken, arka uçtan döndürülen değerin boş olup olmadığını kontrol etmek için tek bir if kullanıyorum. Aşağıda yaptığım şey:

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

Burada başka bir koşulum yok çünkü değişkeni zaten boş bir dize olarak başlattım ve bu nedenle alan için değer yoksa, değişkenim boş bir dize tutacaktır.

Ancak, aşağıda kullanmanın mantıklı olup olmadığını anlamam gerekiyor:

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

VEYA

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

Performans açısından ikisinden daha iyi olanı anlamak için yardıma ihtiyacım var?

Yanıtlar

6 DavidReed Aug 20 2020 at 04:58

Bu formlar:

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

ve

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

elmadan portakaldır. String.isNotBlank()sadece kontrol etmekle kalmaz null, aynı zamanda boş ve tüm-beyaz-boşluk dizgelerini de kontrol etmez , bu da kontrol etmekten daha hesaplama açısından pahalıdır null. Performansla eşdeğer olmadıklarından, özel gereksinimleriniz için ihtiyacınız olanı kullanın.

Ek olarak, Apex derleyicisi orta derecede akıllıysa, bunların her ikisi de yazıldığı gibi optimize edilmelidir , çünkü karşılaştırma aynı çıktı ile sonuçlanır. (Yine de bu, sizin örneğinizde bir hata olduğundan şüpheleniyorum).

Üçlü operatörün veya bir ififadenin daha hızlı olup olmadığına gelince : Derek F.'in yorumladığı gibi, önemli değil. Performans etkisi, eğer varsa - ve yine, eğer Apex derleyicisi akıllıysa, hiç de farklı olmamalıdır - hem uygulamanızın diğer performans özellikleri tarafından tamamen etkilenecek ve tanımsız / gelecekteki Salesforce sürümlerinde değişime tabi olacaktır. . Endişelenme.