一般我是晚上做Kata抒痒,第二天早晨寫(xiě)文章記錄幌绍。不過(guò)今天這個(gè)Kata比較簡(jiǎn)單,我又比較閑故响,做完干脆就把文章寫(xiě)了傀广。
經(jīng)歷過(guò)一段(10行的)算法訓(xùn)練之后,我們又可以偷懶——哦不是彩届,我們又可以進(jìn)行思維訓(xùn)練了伪冰。
這次的任務(wù)很簡(jiǎn)單,找到一段自己一年前寫(xiě)的代碼樟蠕,幾百行左右贮聂,然后閱讀三遍,每遍角度不同寨辩。
- 第一遍把代碼作者看作大牛吓懈,找他寫(xiě)的好的地方
- 第二遍把代碼作者看作新手,找他寫(xiě)的爛的地方
- 第三遍把代碼作者看作二逼靡狞,找他出BUG的地方
我之前的代碼在GitHub上耻警,所以直接找了一段看,那個(gè)項(xiàng)目的名稱(chēng)叫worldline耍攘,感興趣的可以去看看榕栏,雖然我覺(jué)得肯定沒(méi)人看,哈哈蕾各。
那個(gè)項(xiàng)目大概是兩年前寫(xiě)的扒磁,當(dāng)時(shí)用了canvas,工作量主要在前端式曲。印象中實(shí)現(xiàn)功能的時(shí)候遇到了很多坑妨托,比如jQuery的animation并發(fā)的時(shí)候必須手動(dòng)stop之前的動(dòng)作什么的缸榛。說(shuō)起來(lái)似乎也算不上是坑,只是自己不理解jQuery罷了兰伤,不過(guò)當(dāng)時(shí)很是痛苦了一段時(shí)間内颗。
功能實(shí)現(xiàn)之后代碼爛到自己也看不下去了,就認(rèn)真地重構(gòu)了一下——當(dāng)然敦腔,是基于我兩年前的實(shí)力進(jìn)行重構(gòu)——當(dāng)時(shí)自己還感覺(jué)挺叼的均澳,提取了好多公共函數(shù),重構(gòu)之后大概減少了40%代碼符衔,一直以此為榮找前,雖然從來(lái)沒(méi)告訴過(guò)別人。
這次打開(kāi)這段代碼一看判族,果然躺盛,就像看自己一年前的QQ空間一樣,圖樣圖森破形帮。當(dāng)然槽惫,幸運(yùn)的是比兩年前的QQ空間好點(diǎn),兩年前就不是幼稚了辩撑,是SB界斜,恨不得穿越回去抽丫幾嘴巴子。
具體代碼我就不貼了槐臀,直接說(shuō)結(jié)論:
寫(xiě)的好的地方主要是提取了公共函數(shù)锄蹂,用canvas畫(huà)圖時(shí)候方便了許多
寫(xiě)的爛的地方主要有三點(diǎn):
- 代碼沒(méi)有格式化。當(dāng)時(shí)的我可能還不知道有自動(dòng)格式化插件水慨,所以代碼亂七八糟的得糜。
- 抽象程度不夠。只是提取公共函數(shù)晰洒,其實(shí)代碼仍然很亂朝抖,應(yīng)該用類(lèi)或者原型繼承方式重構(gòu)的。這次切實(shí)體會(huì)到了類(lèi)的重要性谍珊,類(lèi)看起來(lái)比較有調(diào)理治宣,從init開(kāi)始一步一步深入。函數(shù)的話只能一大片代碼慢慢往下看砌滞,很難建立整體的邏輯關(guān)系侮邀。
- 細(xì)節(jié)做得不好。具體來(lái)說(shuō)就是命名不規(guī)范贝润,很多函數(shù)直接就叫a绊茧、b,還有就是賦值不恰當(dāng)打掘,應(yīng)該加var的地方?jīng)]有加华畏,可能會(huì)污染全局空間鹏秋。
這個(gè)練習(xí)就像“好好學(xué)習(xí)天天向上”一樣,說(shuō)起來(lái)簡(jiǎn)單做起來(lái)難亡笑。做起來(lái)難的原因很簡(jiǎn)單——自以為是侣夷,覺(jué)得沒(méi)必要做,其實(shí)錯(cuò)過(guò)了許多提高的機(jī)會(huì)仑乌。
以后有機(jī)會(huì)的話要經(jīng)常溫故而知新百拓,最后把CodeKata作者的一句話送給大家:
Moving Forward By Looking Back