异或( ^= ) 巧妙完成开关灯

2017-12-15  本文已影响34人  pdog18

如果现在要写一个控制器,对同一个按钮进行操作,点击一次是开灯,再点击一次是开灯,以此类推。

非常简单,创建一个成员变量,然后每次使用时取反就好了就可以了。
伪代码如下:

    boolean flag = false;

    void onClick() {
        flag = !flag;
        if (flag) {
            //on
        } else {
            //off
        }
    }

取反的地方在于flag = !flag;

而通过 ^=就简单一点

    boolean flag = false;

    void onClick() {
        if (flag ^= true) {
            //on
        } else {
            //off
        }
    }

flag ^= true,每次操作的时候对都flag进行了改变,并且每次改变后都值都是之前的值相反。

例如有个Light对象,它有一个trun()方法每次,接收一个boolean参数

   boolean flag = false;

   void onClick() {
       flag = !flag;
       light.trun(flag);
   }

可以改成

   boolean flag = false;

   void onClick() {
       light.trun(flag ^=true);
   }

源代码从5行变成了4行,整整节省了20%!,更别提四舍五入之后的情况了。

上一篇 下一篇

猜你喜欢

热点阅读