Single if vs ternary operator - ประสิทธิภาพ

Aug 20 2020

ต้องการความเข้าใจเกี่ยวกับประสิทธิภาพเมื่อใช้ตัวดำเนินการ if vs ternary ตัวเดียว

ฉันสร้างอินสแตนซ์ Wrapper โดยที่ฉันเริ่มต้นตัวแปร เช่นด้านล่าง:

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

ตอนนี้ในขณะที่ฉันกำหนดค่าที่ส่งคืนจากแบ็คเอนด์ให้กับตัวแปร wrapper ฉันใช้ if เพื่อตรวจสอบว่าค่าที่ส่งกลับจากแบ็คเอนด์ไม่ว่างเปล่า ด้านล่างนี้คือสิ่งที่ฉันทำ:

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

ฉันไม่มีเงื่อนไขอื่นที่นี่เพราะฉันได้เตรียมใช้งานตัวแปรเป็นสตริงว่างแล้วและด้วยเหตุนี้หากไม่มีค่าสำหรับฟิลด์ตัวแปรของฉันจะเก็บสตริงว่างไว้

อย่างไรก็ตามฉันต้องเข้าใจว่าการใช้ด้านล่างนี้เหมาะสมหรือไม่:

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

หรือ

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

ฉันต้องการความช่วยเหลือในการทำความเข้าใจว่าอะไรคือสิ่งที่ดีกว่าของทั้งสองจาก standponint ประสิทธิภาพ?

คำตอบ

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 . อย่าเพิ่งกังวลไป