Operator tunggal jika vs terner - kinerja
Perlu pemahaman tentang kinerja saat menggunakan operator jika vs terner tunggal.
Saya membuat contoh pembungkus dimana saya menginisialisasi variabelnya. Misalnya di bawah ini:
public class MyWrapperClass{
public string sUserName;
public MyWrapperClass(){
this.sUserName = '';
}
}
Sekarang, sementara saya menetapkan nilai yang dikembalikan dari back-end ke variabel pembungkus, saya menggunakan satu jika untuk memeriksa apakah nilai yang dikembalikan dari back-end tidak kosong. Di bawah ini yang saya lakukan:
if(String.isNotBlank(myObj.myField__c)){
myWrapperInstance.sUserName = myObj.myField__c;
}
Saya tidak memiliki kondisi lain di sini karena saya sudah menginisialisasi variabel sebagai string kosong dan karenanya jika tidak ada nilai untuk bidang tersebut, maka variabel saya akan menyimpan string kosong.
Namun, saya perlu memahami apakah masuk akal untuk menggunakan di bawah ini:
myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : '';
ATAU
myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : '';
Saya butuh bantuan untuk memahami apa yang lebih baik dari keduanya dari standar kinerja?
Jawaban
Bentuk-bentuk ini:
myWrapperInstance.sUserName = String.isNotBlank(myObj.myField__c) ? myObj.myField__c : myObj.myField__c;
dan
myWrapperInstance.sUserName = myObj.myField__c != null ? myObj.myField__c : myObj.myField__c;
adalah apel-ke-jeruk. String.isNotBlank()
tidak hanya memeriksa null
, tetapi juga untuk string kosong dan semua spasi, yang secara komputasi lebih mahal daripada pemeriksaan null
. Gunakan salah satu yang Anda butuhkan untuk kebutuhan spesifik Anda, karena mereka tidak setara dengan kinerja.
Selain itu, keduanya harus dioptimalkan seperti yang tertulis jika kompiler Apex cukup pintar, karena perbandingan menghasilkan keluaran yang sama. (Saya curiga itu hanya kesalahan dalam contoh Anda).
Adapun apakah operator terner atau if
pernyataan lebih cepat: seperti komentar Derek F., itu tidak masalah. Dampak kinerja, jika ada - dan sekali lagi, jika kompiler Apex pintar, seharusnya tidak ada perbedaan sama sekali - keduanya akan sepenuhnya dibanjiri oleh karakteristik kinerja lain dari aplikasi Anda, dan tidak ditentukan / dapat berubah dalam rilis Salesforce mendatang . Jangan khawatir tentang itu.