단일 if 대 삼항 연산자-성능
단일 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 : '';
성능 기준에서 두 가지 중 더 나은 것이 무엇인지 이해하는 데 도움이 필요합니까?
답변
이러한 형태 :
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 릴리스에서 정의되지 않거나 변경 될 수 있습니다. . 그것에 대해 걱정하지 마십시오.