閱讀原始碼的意義與方法

2021-09-11 12:42:32 字數 1199 閱讀 5900

思索了這兩個問題良久,也去知乎找了一些相關話題的問答,但並沒有標準答案。所以,我這裡也只是記錄一些我對此的看法,也許會隨著 rtfsc 閱歷的豐富而發生變化,我會記錄更新於 github.com/mzlogin/rtf…。

在我看來,閱讀原始碼的意義在於學習優秀的「套路」。

這裡的「套路」所指範圍很廣,大到架構設計,小到可取的命名風格,還有設計模式、實現某類功能使用到的資料結構和演算法等等。所謂高手,其實就是能比大部分人更早更快地掌握套路並熟練運用之人。

埋頭在自己的天地裡耕芸固然也能逐漸進步和成長,但總會有時候會遇到一些場景,你苦思良久也無法做出良好的設計,總會有一些時候,糾結如何為乙個變數命名讓你停下飛速敲擊的手指。這些令你為難的場景,先賢們也許早就遇到過,並且給出了優雅的解決方案。看優秀的原始碼的時候,將這樣的場景與對應的方案收入囊中,或者僅僅在腦中留下乙個印象也好,以便在需要的時候,你的**庫里總能掏出一把稱手的傢伙來。

不應該這樣

不應該漫無目的地隨手拿起一分原始碼,試圖去通讀。這一方面會過目即忘無所收穫,另一方面會枯燥得讓你迅速從著手到放棄。學習的方式有很多種,閱讀原始碼並不一定是最適合你當前的情況的。

應該這樣

如果你想學習的知識點有官方文件,先看文件再看原始碼。

直接從原始碼著手,搞清楚原理固然是好,但是原始碼有可能是難啃的,先熟悉官方提供給所有人看的文件,能較為平滑地對這方面的知識先有個大概的了解,然後再結合原始碼去深入。

提出具體的問題,然後帶著問題到原始碼中找答案。

比如在使用 toast 的過程中,你可能會想到一些問題:toast.maketext(...).show()時發生了什麼?toast 能不能在非 ui 執行緒呼叫?能不能自定義 toast 布局?諸如此類。在原始碼中探尋完你想要的答案,你的目的也就達到了。

從一些共性層面入手。

大部分的程式裡都會使用到的東西,比如執行緒模型、ui 組織結構、任務排程方式等等。針對某乙個方面去了解,比漫無目的要有效率得多。

最好能夠編譯執行起來。

如果乙份**你只能看不能跑,那可能讀到一些地方你只能猜這個地方的資料值和跳轉結構是怎麼樣的,而很有可能你猜的是錯的。但如果你能編譯執行,那在需要的時候你可以修改,加日誌等等來更好地觀察和驗證你的想法,得到正確的理解。

做一些筆記。

一方面是將你的學習成果保留下來,方便隨時查閱,畢竟只憑腦子記憶是不靠譜的;另一方面在學習的過程中,也能幫助理解。

閱讀原始碼的方法

首先要有大體的概念,然後再讀功能,最後再讀細節,欣賞一些精彩的 對於一篇原始碼讀懂的大體思路 在單執行緒的情況下 搞清楚每個函式的作用,元件的作用,之後就知道了這篇原始碼的作用,輸入是什麼,輸出是什麼,作用是什麼 然後就是程式邏輯了,複雜的邏輯需要反覆,慢慢看,看的時候只需順清楚主線流程就行,一些i...

《原始碼閱讀》原始碼閱讀技巧,原始碼閱讀工具

檢視某個類的完整繼承關係 選中類的名稱,然後按f4 quick type hierarchy quick type hierarchy可以顯示出類的繼承結構,包括它的父類和子類 supertype hierarchy supertype hierarchy可以顯示出類的繼承和實現結構,包括它的父類和...

框架原始碼閱讀的方法與技巧

是形式,邏輯是神韻。在 解鎖優秀源 的基本方法與技巧 一文中,了閱讀優秀原始碼的基本步驟 方法 技巧 所面臨的障礙及克服之策。多加訓練,應該可以達成如下目標 欲速則不達。閱讀原始碼很容易理解為就是直接去閱讀 本身。實際上,只是形式,邏輯才是神韻。凡是有助於去理解邏輯,理解其原理 架構 實現的,都是值...