嚴復在《天演論》講到:「譯事三難:信、達、雅「,這也是高中英語老師素來強調的,類比一個事物邏輯和程序亦是如此,程序上單單是作到能夠跑出來效果是遠遠不夠的,一個程序的好壞也要用」信達雅「來衡量。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裏做爲筆記,我不多在代碼裏寫詳細的註釋,即使幾個月後看不懂本身寫的,那我會翻看個人課件。
新人的一些淺薄認識,不足之處你們多多擔待。