Одиночный if vs тернарный оператор - производительность
Требуется некоторое понимание производительности при использовании одного оператора if vs ternary.
Я создаю экземпляр оболочки, в котором инициализирую ее переменные. Например, ниже:
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
оператор быстрее: как прокомментировал Дерек Ф., это не имеет значения. Влияние на производительность, если таковое имеется - и, опять же, если компилятор Apex умен, не должно быть никаких отличий - будет полностью подавлено другими характеристиками производительности вашего приложения и не определено / может быть изменено в будущих выпусках Salesforce. . Не беспокойся об этом.