严复在《天演论》讲到:“译事三难:信、达、雅“,这也是高中英语老师素来强调的,类比一个事物逻辑和程序亦是如此,程序上单单是作到能够跑出来效果是远远不够的,一个程序的好坏也要用”信达雅“来衡量。javascript
当看到矩阵类的图形时,咱们的第一印象固然是使用二维数组来描述了,很显然这是没什么大问题的。java
就拿此案例里的七段数显时钟,好比一个数字8,咱们会用下面的数字来描述数组
// 使用一、0来描述不一样的对象,固然你能够喜欢啥用啥,好比第二种
let NUM_EIGHT = [
[1, 1, 1],
[1, 0, 1],
[1, 1, 1],
[1, 0, 1],
[1, 1, 1],
]
let Eg = [
['■', '■', '■'],
['■', '□', '■'],
['■', '■', '■'],
['■', '□', '■'],
['■', '■', '■'],
]
复制代码
而后呢,构建好这样一个二维数组,咱们可使用双层for遍历这个二维数组来构建咱们的视图,这里你们比较容易,就不给出代码了。bash
接触的多了,你们会发现,使用二维数组虽然简单,可是十个数字定义下来,占用了很大一部分空间(编辑器),最主要的是咱们的代码看上去不是很优雅,这就好像一个,那么如何改善呢?编辑器
咱们知道,七段数显这类矩阵每一个点也就两种状态,其实彻底能够用1bit表示,有时候使用二进制会让代码看起来更简洁、优雅。spa
下一步的重点就是如何获取每一位数字了,按位运算符& >>就派上用了,&按位与的逻辑就是全一为一,也就是code
1 & 1 // 1
1 & 0 // 0
0 & 1 // 0
0 & 0 // 0复制代码
这里有些结论cdn
任何数 & 同位数全1,仍是这个数自己,如0b1011 & 0b1111 = 0b1011对象
取一个数中指定位,如取低位1bit,0b1011 & 0001 = 0b0001(这也是咱们今天须要的)blog
其实这里还缺乏一个东西,就是移位操做,这是个很形象的游戏,规则
规则是听到口令作动做,口令有两句,左移n位,右移n位
凳子上有人的记1,没人的记0
没有凳子的人淘汰
如图所示
结合按位与和移位运算,咱们便可完成咱们的逻辑,代码也至关简单
let num = 0x7bef
while (num) {
let show = num & 1;
num = num >> 1;
if (show) {
// coding
}
}复制代码
其余思路,这里再提供一种方式就是使用toString
0x7bef.toString(2).split("")
// ["1", "1", "1", "1", "0", "1", "1", "1", "1", "1", "0", "1", "1", "1", "1"]复制代码
后面要作的就是数据和视图的映射了,这里就不给赘述了。
做为刚刚入行的我,每次代码写完后都会思考下如何把代码写的符合”信达雅“,译文推崇的也是我程序所需的,我会尽可能把逻辑写的简洁,过程当中的思考和内在逻辑会写在PPT里做为笔记,我不多在代码里写详细的注释,即使几个月后看不懂本身写的,那我会翻看个人课件。
新人的一些浅薄认识,不足之处你们多多担待。