【发布时间】:2020-01-26 20:48:37
【问题描述】:
所以这听起来可能很简单,但我有一个内部有 for 循环的方法,在 forloop 内部,方法 createprints 需要从 getParameters 获取的“参数”映射,现在有两种类型的报告,一种有一个通用的参数集,而另一个具有该通用集和自己的一组参数。
我有两个选择:
有两个getparameters方法,一个是通用的,另一个是用于rp2但也调用通用参数方法。如果我这样做,那么在 for 循环之前添加条件是有意义的:
theMethod(){
if (rp1){
for loop{
createPrints(getgenParameters())
do general forloop stuff
}
}else{
for loop{
createPrints(getParameters())
do general forloop stuff
}
}
}
这样,它只检查一次要调用的参数方法,而不是在循环中使用 if 语句,以便检查每次迭代(这很糟糕,因为报告类型在整个循环中永远不会改变)但是这样,重复for 循环看起来很丑,而且根本不干净,有没有更干净的方法来设计它?
另一种选择是将布尔值传递给 get parameters 方法,基本上您可以检查它是哪种类型的报告,并根据您创建的地图,但是这也会在每次迭代时添加一个条件。
从性能的角度来看,将条件放在循环之外是有意义的,这样它就不会在每次迭代时进行冗余检查,但它看起来并不干净,而且我的老板真的很关心代码看起来有多干净,他不喜欢我使用一个 if else 代码块,而不是使用三元运算符,因为三元只使用一行(我认为性能仍然相同吗?)。
忘了说我用的是java,我不能给变量分配函数或使用回调 在方法内部,在 for 循环之前有一个 if else 代码块,类似于
String aVariable;
if(condition){
aVariable= value1;
}else{
aVariable =value2;
}
所以我最初只想创建一个像 isreport1 这样的布尔变量,并且在 if/else 代码块内部也分配值,因为它使用相同的条件。然后如前所述传入参数但是,我的老板又说不要在参数中使用布尔值,所以这种情况我不应该在这里做吗?
【问题讨论】:
-
你忘了
if(我猜)。 -
三元组不一定比
if...else更有效,而且它们往往会混淆代码。如果您的代码最终会打印某些内容(createPrints()),无论如何这不太可能成为您的瓶颈。 “哪个更快?”的答案是总是配置它并查看。 -
对不起代码不是我的意思,我通常不使用伪代码,现在修复它
-
是的,我真的不认为三元组更快,这就是我感到困惑的原因,他说它看起来更干净,我觉得这很自以为是,但这不是我关心的问题,我是否应该在里面添加条件逻辑一个通用循环,或者像我上面显示的那样,它运行的步骤更少,因为它只有一个条件而不是每次迭代,但它看起来也不干净,有没有办法让它看起来更干净?我还被告知不要将布尔值传递给方法,因为你可以使用它的唯一方法是 if else,所以它不是一个很好的做法。
-
关于每次迭代时在循环内执行
if的性能,尽管在循环期间条件没有改变:这取决于。在编译为机器代码的语言中(无论是在编译时,还是在运行时使用 JIT),CPU 都会进行分支预测并确定每次都选择了相同的分支,因此性能影响可能可以忽略不计。在解释型语言中,开销可能更大,因为 CPU 在解释器中预测分支,而不是直接在您的代码中预测。 en.wikipedia.org/wiki/Branch_prediction
标签: java algorithm performance design-patterns