官术网_书友最值得收藏!

1.3 元編程的學習方法

學習從來就不是一件輕松的事情,元編程的學習尤其如此。本節將介紹一些元編程技術的學習心得和方法,幫助讀者做好學習元編程技術的準備。

1.3.1 培養興趣

相比編程語言的基本語法,元編程相關的技術往往更有難度。為什么呢?一方面,元編程需要開發者對目標語言本身以及編譯原理有一定的了解;另一方面,元編程需要開發者有一定的開發經驗積累,能夠從復雜的業務場景中抽象出需要解決的問題。

不過,換個角度來看,元編程又很簡單。正如前面提到的,元編程在多數情況下就是處理程序中的模板代碼,目的是提升研發效率,因而元編程的需求往往來自研發團隊自身。相比多變的產品需求,元編程的需求往往更簡單、更純粹。

不僅如此,元程序的編寫過程中往往富有挑戰,解決問題的過程中又充滿樂趣。元編程還可以實現四兩撥千斤的效果,給開發者帶來很大的成就感和價值感。

因此,要學習元編程技術首先要做的就是充分調動自己的技術熱情,不要有畏難情緒。

1.3.2 付諸行動

“紙上得來終覺淺,絕知此事要躬行。”我們學習編程技術,最忌諱的就是“看了就是會了”,學習元編程技術尤其如此。元數據通常都比較抽象,不容易憑直覺想象,如果不動手試驗,有些情況是很難直接想到的。

例如我在準備9.5.3節的內容時,需要研究$changed的計算方法(參見代碼清單9-87),其中涉及的條件非常煩瑣、復雜,為了搞清楚各個分支的關系,就必須要構造各種用例來反復嘗試。

1.3.3 善用工具

由于元數據比較抽象,因此合理地利用一些工具來幫助我們快速找到問題的本質也是非常重要的。

在眾多工具中,對Kotlin元編程最有幫助的莫過于PsiViewer了。PsiViewer是一款可以將IntelliJ平臺的PSI(Program Structure Interface,程序結構接口)可視化的IntelliJ插件。

接下來看一個具體的例子,如代碼清單1-6所示。

代碼清單1-6 GitUser類

比如,我們希望搞清楚id的類型Int是什么類型的節點,就可以通過PsiViewer非常方便地看到,如圖1-2所示。

圖1-2 使用PsiViewer查看Int節點

PsiViewer可以用來查看所有IntelliJ平臺支持的編程語言,它最常用的應用場景實際上是IntelliJ插件的開發。Kotlin編譯器使用了PSI作為Kotlin的抽象語法樹,因此PsiViewer同樣可以用于Kotlin編譯器插件的開發。

說明

尚未正式發布的K2編譯器(K2Compiler,Kotlin的新一代編譯器)已經不再使用PSI,而是自研了一套專用的FIR(Front-end Intermediate Representation,前端中間表示)作為新的抽象語法樹。

1.3.4 多讀源代碼

元編程技術的參考資料遠不及入門教程多,甚至連官方文檔也對此諱莫如深。其實原因說來也簡單,元編程技術相對于其他技術而言還是太小眾了。

資料的缺乏,特別是成體系的資料的缺乏,自然是我希望本書能夠解決的問題之一。不過,縱然我能把我知道的內容完全呈現到紙面上,也還會受到個人技術水平和內容篇幅的限制,不能解決的問題仍然是大多數。

怎么辦呢?

很簡單,經常翻閱編譯器甚至IntelliJ社區版的源代碼,所有問題的答案基本上都可以在編譯器源代碼中找到。如果你想要成為元編程技術的高手,那一定要養成有問題翻閱源代碼的習慣。我們將在1.4節介紹如何配置編譯器以及IntelliJ社區版的源代碼調試環境,強烈建議讀者將環境配置好并時常翻閱源代碼。

主站蜘蛛池模板: 灯塔市| 桃园县| 江源县| 岢岚县| 习水县| 民勤县| 舒城县| 简阳市| 乌海市| 咸宁市| 伊宁县| 逊克县| 丹棱县| 大港区| 瓦房店市| 东兴市| 湟中县| 迁西县| 兴海县| 绥江县| 宜黄县| 临清市| 望城县| 竹溪县| 吉林市| 姚安县| 鲁甸县| 仪征市| 达日县| 柯坪县| 华容县| 临安市| 门源| 六盘水市| 厦门市| 四子王旗| 吐鲁番市| 江油市| 额尔古纳市| 南开区| 麻栗坡县|