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

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

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

    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%!,更别提四舍五入之后的情况了。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容