단일 if 대 삼항 연산자-성능

Aug 20 2020

단일 if 대 삼항 연산자를 사용할 때 성능에 대한 이해가 필요합니다.

변수를 초기화하는 래퍼 인스턴스를 만듭니다. 예 :

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

이제 백엔드에서 반환 된 값을 래퍼 변수에 할당하는 동안 백엔드에서 반환 된 값이 비어 있지 않은지 확인하기 위해 단일 if를 사용합니다. 다음은 내가하는 일입니다.

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

변수를 이미 빈 문자열로 초기화했기 때문에 여기에 else 조건이 없으므로 필드에 대한 값이 없으면 내 변수가 빈 문자열을 보유합니다.

그러나 아래에서 사용하는 것이 합당한 지 이해해야합니다.

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

또는

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

성능 기준에서 두 가지 중 더 나은 것이 무엇인지 이해하는 데 도움이 필요합니까?

답변

6 DavidReed Aug 20 2020 at 04:58

이러한 형태 :

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

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

사과에서 오렌지까지입니다. String.isNotBlank()는 단순히를 확인하는 null것이 아니라 비어있는 모든 공백 문자열을 확인하는 것보다 계산 비용이 더 많이 듭니다 null. 성능이 동일하지 않으므로 특정 요구 사항에 필요한 것을 사용하십시오.

또한 비교 결과 동일한 결과가 나오기 때문에 Apex 컴파일러가 적당히 영리하다면 이 두 가지 모두 최적화 되어야 합니다. (나는 그것이 당신의 예에서 단지 실수라고 생각합니다).

삼항 연산자 또는 if명령문이 더 빠른지 여부는 Derek F.가 언급 했듯이 중요하지 않습니다. 성능에 미치는 영향 (해당하는 경우 및 Apex 컴파일러가 영리한 경우에도 전혀 다르지 않아야 함)은 모두 응용 프로그램의 다른 성능 특성에 의해 완전히 휩쓸 리며 향후 Salesforce 릴리스에서 정의되지 않거나 변경 될 수 있습니다. . 그것에 대해 걱정하지 마십시오.