当有至少10-20个条件时,使用开关(switch)语句或者if语句执行速度快吗?
谢谢 戴夫
使用其中一个可能会有轻微差异,但对于10-20个条件,我认为switch case可能更易读和更适合。
如果没有更多关于问题本质的了解,我猜测你在错误地优化某些东西。
唯一需要考虑条件速度的情况是当你循环遍历大型数据集并根据一个特定数据字段的内容做出不同决策时。
如果你对每个数据集都要做很多事情,那么条件的成本应该与每个循环迭代的速度无关,你应该优化可读性并使用switch语句。
如果你在每次迭代中只做很少的事情但必须重复一百万次,则可以采用不同的方法:
foreach($alldata as $index => $dataset)
{
$function_to_call = 'handle_'.$dataset->switching_value;
if (function_exists($function_to_call))
$function_to_call($dataset);
}
我一直被教导说,如果有4或5个以上的条件,你应该几乎总是使用switch
而不是if
/else
/else if
结构 - 但我可能是错的。
我对Jordan提供的(第一个)链接持怀疑态度,我认为当适当使用时,switch
应该会稍微快一些,我没有硬数据来支持它,但你可以自己进行基准测试。一个永远不应该使用switch
的场景是当你需要进行严格的(===
)比较时。
无论如何,这只是微小的优化,我更喜欢有一个可读性好、漂亮的(女孩风格的)代码,即使可能会牺牲0.000001秒,也不要一个丑陋的代码。
对于10-20个条件,我认为你应该绝对使用switch
。