• 夜里无聊,来扯个蛋吧


     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代码高亮,我甚至可以一瞬间判断当前句的含义,

    就是判断左边变量里面右边那些位是否存在,而,如果喜欢第一种写法,

    乖乖,你从头读一下吧。

  • 相关阅读:
    Web开发常用知识点
    我的PHP之旅:开篇,走入开源的世界
    WPF Knowledge Points ContentControl和ContentPresenter的区别
    WPF Knowledge Points 控件状态利器:VisualStateManager详解
    WPF Control Hints ComboBox : 如何去掉ComboBox的DropDownButton
    WPF Control Hints ContextMenu : 怎么通过MenuItem的Click事件取得ContextMenuItem绑定的类实例?
    WPF Knowledge Points Binding.StringFormat不起作用的原理和解决
    AJAX请求 $.ajaxSetup方法的使用
    Html标签输出到前台并导出到Excel
    XML序列化和反序列化
  • 原文地址:https://www.cnblogs.com/suanguade/p/5944444.html
Copyright © 2020-2023  润新知