Так что я скрывался здесь последние несколько лет и, наконец, пришел к ситуации, когда я НЕ нашел здесь существующего ответа. Сам вопрос довольно прост.Условный тернар с вызовом метода на db
Предположит следующее заявление (нет конкретного языка синтаксиса):
var result = fetchFromDb() == null ? defaultValue : fetchFromDb().property;
То, что я хочу знать: это компилятор в Java или C# есть способ оптимизировать это утверждение или будет действительно быть двумя вызовами метода fetchFromDb()
, означающим два вызова доступа к БД, два плана выполнения и так далее?
Я уже тестировал это на Java и выяснил, что метод вызывается дважды, но я понятия не имею о возможном кэшировании в фоновом режиме или что-то в этом роде.
Итак: используется тернарный условный метод с плохой практикой? Есть ли способ кэшировать значение по сравнению с встроенным, чтобы сохранить красоту этого стиля?
var result = fetchFromDbSupplyingDefaultValue (defaultValue); –
Он не будет оптимизирован, если это не известная функция. –
Люди часто думают, что тройной оператор заменяет 'if', а это не так. Хотя стиль может быть привлекательным во многих случаях, просто не имеет смысла пытаться заставить все ifs тройным операторам (это с точки зрения Java/C#). – Kayaman