Tile类的实现(代码中的信达雅)

前言

严复在《天演论》讲到:“译事三难:信、达、雅“,这也是高中英语老师素来强调的,类比一个事物逻辑和程序亦是如此,程序上单单是作到能够跑出来效果是远远不够的,一个程序的好坏也要用”信达雅“来衡量。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里做为笔记,我不多在代码里写详细的注释,即使几个月后看不懂本身写的,那我会翻看个人课件。

新人的一些浅薄认识,不足之处你们多多担待。

相关文章
相关标签/搜索