首页 > 代码库 > 夜里无聊,来扯个蛋吧
夜里无聊,来扯个蛋吧
1 if (FlagOn(DesiredAccess, FULL_WRITE_FILE_DESIRED_ACCESS)) 2 { 3 XXXXXX; 4 } 5 6 7 8 if (DesiredAccess & FULL_WRITE_FILE_DESIRED_ACCESS) 9 {10 XXXXXX;11 }
这两段代码,功能上没有任何区别,但是你喜欢哪种写法。
如果有缘人看到的话,可以给我留个言,但是一定要写下原因,咱们可以讨论一下。
我喜欢第二种写法。
原因,执行效率上,二者几乎没有任何区别,
但是前提是编译器没问题,而且FlagOn它必须是个宏,(事实上它确实是个宏,但是没有任何东西能保证一直或者说永远是这样,而且它的命名规则是函数型的)
(宏的标准命名规则是全大写,Windows下,习惯把API函数的命名写成驼峰式,所以一打眼这个东西的话,容易让人误解可能是个函数)
只要编译没问题,执行方面,它们的效率就是相同的,(这里是有条件的阿)
最差的情况下,如果编译出现问题,或者FlagOn不是宏的话,那么肯定是第二种写法执行速度更快。
好了,代码还有个可读性的问题。
这两个,哪个可读性更好呢,我认为还是第二个,
首先,我们分析这块代码的元素阿,
第一行,包括一个关键字,两个元素,加上一个宏,
第八行,包括一个关键字,两个元素,加上一个运算符,
差别就在宏的可读性和运算符的可读性,哪个更好了,
我个人认为,运算符的可读性更好,
因为一个符号,程序员看到它之后,条件反射地就会想到它的功能,甚至肌肉性地,根本不用经过大脑,就知道它是做什么的,
就好比, + - * / 四则运算,的运算符,只要上过几年小学的孩子,一般都不会用错,而且他也不需要考虑这运算符有什么用处,很自然,他就知道,
上了初中,高中的孩子,肯定不会把 + 当成 - ,这就是肌肉记忆。
(像 &~ |~ 这种复杂的组合运算符,目前不考虑,因为这本身不是难度很高的组合运算符计算)
而一个宏的识别难度,远不只几个运算符那种简单的量级而已,
首先,要么知道那个单词的意思,即便知道了单词的含义,还要去猜函数的含义,这是最好的情况,情况差一点的话,可能就要去看MSDN或者上网搜索了,
这些都解决了之后,大致可以知道这个宏的意思了之后,还要了解它的参数,这些都做到了之后,才能知道这里是要做什么,
有可能有人会说,对这个宏完全不了解的话,才会去查那么多乱七八糟的,如果知道它是做什么的,那么商量两步都可以省去了,
但是我想说,一个宏,几个字母,简单运算符,是1个字符,你看N个字母速度快,还是看1个字符速度快,
看了N个字母之后,还要反应一下组合起来它的含义,而看到运算符,基本上不需要反应时间,
最后,只要代码风格标准,运算符两边有空格,加上IDE代码高亮,我甚至可以一瞬间判断当前句的含义,
就是判断左边变量里面右边那些位是否存在,而,如果喜欢第一种写法,
乖乖,你从头读一下吧。
夜里无聊,来扯个蛋吧