1. 程式人生 > >如何閱讀別人的程式碼(轉自coney)

如何閱讀別人的程式碼(轉自coney)

原文網址:http://gengbiao.me/technique/如何閱讀別人的程式碼/#

第一次寫部落格,所以就先從轉載別人的文章開始,然後加一點自己的感受。

如何閱讀別人的程式碼

首先要能執行起來

本人一般都是先想辦法讓程式碼執行起來,只有這樣,當我對程式碼做更改的時候,才能通過程式的變化直觀的看到我更改的這部分程式碼究竟是負責哪一部分的。

個人經驗表示,github上只要是靠譜點的開源專案都會在README裡面寫上如何部署的。我一般發現README寫的不太好的,都是先去找找別的,實在找不到了才會回來看這個。

個人觀點:README也有些比較難懂,有點寫的很隨意,基本不可能部署出來,這時候就可以選擇放棄

比如碰到某個輸出函式你不知道到底執行在哪個部分,可以直接改掉裡面的輸出,再執行程式,發現你設定的輸出在哪裡粗線了(就是這就是這~),就找到了這句話的執行區間了。

比如你還可以註釋掉一些程式碼,看看程式有什麼反應,是崩潰了還是哪些地方消失了。如果你註釋掉一部分程式碼,發現程式資料不更新了,那就可以判斷出這部分程式碼是跟資料更新有關的,如果程式崩潰了,那看看在哪down掉了,那你註釋的那部分程式碼就在這個地方被使用了。等等。

要有一個全域性搜尋的工具

我一般用的是sublime,感覺蠻好用的。它的作用是隻要你有一絲線索,就可以迅速定位到你想要的地方。你自己還可以折騰下安裝sublime的tag外掛,就可以很方便的從函式呼叫的地方跳到函式定義的地方。

這個方法還是滿通用的。

比如android,我clone下來一個網路非同步的庫volley,但是我覺得他這個庫對json支援的達不到我的要求。我想自己更改,那第一步肯定是用sublime開啟原始碼,搜尋Json。就可以把範圍縮小到區域性了。

比如node.js,我想研究下hexo的git push,那我直接用sublime開啟原始碼,搜尋git就可以直接把範圍縮小很多了。

比如前端我用到了DataTable,但是我覺得他的排序不滿足我的需求。那我可以直接用“sort”關鍵詞搜尋他的原始碼,定位出排序演算法,接下來就可以慢慢改了。不然2W多行的原始碼,豈不是瘋了-_-!

再進一步,可能我不太清楚某個函式的用法與用處,我直接用sublime搜尋這個函式名,所有呼叫到這個函式的程式碼就在我眼前了,接下來我就可以研究這個函式到底在程式中如何使用了。

筆記:我現在用的是notapad++,這個也有全域性搜尋的功能,還有許多外掛。推薦使用。

學會註釋與修改

這個其實就是第一步說的。程式跑不起來很多東西都不能確定,你甚至不知道是對是錯。

多用搜索引擎與官網文件

其實不光是github開原始碼,讀別人的程式碼都需要多用搜索。因為很多時候如果原始碼的註釋不到位,你讀起來是很費勁的。這個時候搜尋引擎就很重要了。

比如我前一陣嘗試iOS的時候,第一次看到block這個東西,根本就不懂這是什麼程式碼怎麼能讀明白,於是直接粘到谷歌裡看了。

比如有時候別人對程式碼做封裝了,你看到的函式根本就不是原生的,但是你剛讀可能不知道,完了你又看不太懂,這個時候你可以直接去搜谷歌或者developer center,比如我前一陣看別人原始碼看到了這個:
[self performDelay:0.5 block:^{}];

谷歌後發現丫根本找不到這個函式是啥。那請不要慌,多半是因為這個函式根本就是專案作者自己封裝的。(有iOS大神可能會文你為毛不command直接進去看,求大神們不噴,我就是舉個例子。)

新手不建議直接通讀原始碼

本人作為一個開發沒多久的程式猿,水平一般,所以讀開源專案的時候很多程式碼根本通讀不能,所以我一般都是用上面的這些方法,從功能入手,一點點研究,慢慢吃透整個專案。