位操作策略 - 灵活的在项目中游走

2018-11-14  本文已影响3人  Zszen

什么是位操作策略?

位操作策略来自电子电路的逻辑运算。最初是通过电子管来实现的,后来延伸到硬件系统和软件环境中。它相当于电子电路的加减乘除。

用微软.net开发的可以不用看,微软有自己一套专门处理这个的类库

按位与,或

原始值 参考值 运算方式 结果 说明
101(二进制) 001 & 与 001 只有同位上都为1才为1,否则为0
101 001 竖线(在这里是制表符) 或 101 两个数字比较时,当前位
101 ~值 010 将当前数值的所有位取反
001 1<<2 100 按位左移,用于将整个数值的二进制编码整体向左移位

记住这些就可以处理策略了

位开关策略

首先设置位开关

const dev1_NONE = 0;
const dev1_enableLog = 1<<0;
const dev1_debugFogOpen = 1<<30;
const dev1_enableMoney = 1<<31;

设置起来非常简单,位开关就是用到了左移这个功能将1移动到指定位置上,一共可以设置32个开关,左移不可以到32,因为一般的程序中枚举或宏定义数值都只保持数字32位(有些语言支持64或者自定义,但如果你对多平台语言都有所接触的话,就把它默认成32位处理就好)

设置策略配置

//debug
const dev1_combin = dev_enableLog | dev_debugFogOpen;
//publish
//const dev1_combin = dev_NONE | dev_enableMoney;

你将会发现,当你切换这两个策略文件的时候,整个项目都随之变化了。这就是位操作策略。如果你用c宏定义,你甚至可以废弃掉无用的代码(宏条件作用在开发周期下,宏条件为假情况下代码不会被编译)

使用策略配置

定义

function DEV1(dev1sth){
  return dev1_combin & dev1sth;
}

使用

if(DEV1(dev1_enableLog)){
  console.log("test xxxx");
}

定义2 取非

function DEV1Not(dev1sth){
  return dev1sth&~ dev1_combin;
}

使用

if(DEV1Not(dev1_enableLog)){
  console.log("test xxxx");
}

为什么使用位操作

因为快。

如果不考虑效率,你完全可以用字符串,或者数组来进行这些操作。

有了这些策略,你就不会因为忘记关闭调试,或忘记开启功能而导致项目陆续因为马虎而埋下的错误。而且有了策略模式,修改起代码,也能更有准对和目的行,你会很快查找到你要修改的部分,也很快的回忆起你修改的内容。它很适合你去交接一个已有的项目,不干扰原项目代码下的继续渗透扩展。

32个开关用完了怎么办???

看到我写的dev1_xxx了吗?你可以多放几种策略,团队开发的时候每个人的策略宏定义商讨互不干扰,不会相互影响到对方。

一些小窍门

在多种语言环境下都有枚举功能,将枚举作为开关更方便管理,这时候DEV1这样的方法函数在输入参数的地方可以规定成只能输入当前枚举值,这样就增强了语法严格性。不用担心多种策略之间相互冲突了。

就写这么多了,慢慢消化吧

上一篇 下一篇

猜你喜欢

热点阅读