【发布时间】:2015-08-11 23:23:51
【问题描述】:
所以过去几年我一直潜伏在这里,终于来到了我在这里没有找到现有答案的情况。这个问题本身很简单。
假设以下语句(无特定语言语法):
var result = fetchFromDb() == null ? defaultValue : fetchFromDb().property;
我想知道的是:Java 或 C# 中的编译器是否有办法优化此语句,或者真的会有两次对 fetchFromDb() 方法的调用,这意味着两个数据库访问调用、两个执行计划等等?
我已经在 Java 中对此进行了测试,发现该方法被调用了两次,但我不知道最终在后台缓存或类似的东西。
那么:使用带有方法的三元条件是一种不好的做法吗?有没有办法缓存与内联比较的值以保持这种风格的美感?
【问题讨论】:
-
var 结果 = fetchFromDbSupplyingDefaultValue(defaultValue);
-
除非它是一个众所周知的功能,否则它不会得到优化。
-
人们通常认为三元运算符是
if的替代品,其实不然。虽然这种风格在许多情况下可能很有吸引力,但尝试将所有 if 强制用于三元运算符(从 Java/C# 的角度来看)是没有意义的。
标签: java c# performance conditional-operator method-call