阅读代码比更新代码更频繁。当编译器可以优化最佳执行时,编写更多可读的代码比编写功能强大的代码更好。
例如,请参阅下面的代码--这段代码可以通过合并嵌套的if语句来压缩,但是编译器会不会在我们保持代码的可读性的同时优化这段代码以获得最佳的执行呢?
// yeild sunRays when sky is blue.
// yeild sunRays when sky is not blue and sun is not present.
if (yieldWhenSkyIsBlue)
{
// if sky is blue and sun is present -> yeild sunRaysObjB.
if (sunObjA != null)
{
yield return sunRaysObjB;
}
else
{
// do not yield ;
}
}
else
{
// if sky is not blue and sun is not present -> yeild sunRaysObjB.
if (sunObjA == null)
{
yield return sunRaysObjB;
}
}与此不同的是:
// yeild sunRays when (sky is blue) or (sun is not present and sky is blue).
// (this interpretation is a bit misleading as compared to first one?)
if(( sunObjA == null && yieldWhenSkyIsBlue ==false) || (yieldWhenSkyIsBlue && sunObjA != null) )
{
yield return sunRaysObjB;
}阅读第一个版本更好地描述了将来增强\更新的用例?第二个版本的代码比较短,但是读取它并不会使用例变得非常明显,或者说它是吗?除了简洁的代码之外,第二种情况还有其他优点吗?
更新#1:是的,在这两种情况下,它都返回ObjB,但基于条件,它可能根本不会产生结果。因此,战略决定何时屈服,何时不屈服。(可读性是imp的另一个原因)
更新#2:更新到站点一个更好的例子。从stripplingWarrior复制语法
更新#3:更新为“当太阳出来,天空是蓝色的时候,你期望会发生什么”。
发布于 2012-03-22 19:00:30
除非您是为了好玩或专门的用例,否则我认为人类可读性是更重要的好代码质量。编译器将将您的大部分表达代码折叠成更高效的形式,您可能永远不会注意到它错过了什么。
考虑到这一点,即使习语代码不那么简洁,也更容易阅读。一种语言的有经验的读者将比不熟悉的代码更快地识别出一种常见的模式,即可以说是“更人性化”,但打破了熟悉的模式。循环/递增结构是代码的一个很好的例子,应该是不足为奇的。所以,我的方法是:要有表现力,但不要太聪明。
https://stackoverflow.com/questions/9826440
复制相似问题