Kotlin應用開發初體驗

Kotlin應用開發初體驗

2011年,JetBrains宣佈開發Kotlin編程語言。這門新語言可以用來編寫在Java虛擬機上運行的代碼,是Java和Scala語言之外的又一選擇。六年後,Google宣佈,Kotlin正式獲得官方支持,可用於Android應用開發。

Kotlin的應用範圍迅速擴展,它從一門前途光明的編程語言搖身一變,成了這個世界上最重要的移動操作系統的欽定開發語言。Kotlin語法簡潔,具備現代高級語言特性,並且能和Java遺留代碼無縫互操作。因為具備這些優勢,今天,越來越多的大公司已開始接納Kotlin,如Google、Uber、Netflix、Capital One、Amazon等。

為什麼要學Kotlin

要想知道為什麼Kotlin廣受歡迎,首先要理解Java在現代軟件開發領域中所扮演的角色。這兩門語言聯繫得非常緊密,因為很多時候,Kotlin代碼的開發目標就是要在Java虛擬機上運行。

Java語言比較穩健,久經考驗。多年來,它一直是最常用的一種編程語言,造就了龐大的生產代碼庫。自從1995年Java問世以來,對於優秀的編程語言應滿足什麼條件,人們已通過實踐積攢了很多經驗教訓。然而,Java卻裹足不前,開發者喜歡的很多現代語言高級特性,它都沒有,或者遲遲才加入。

Kotlin從這些經驗教訓中受益良多,而Java(和其他語言,比如Scala)中的某些早期設計卻愈顯陳舊。脫胎於舊語言,Kotlin解決了它們的很多痛點,進化成了一門優秀的語言。相比Java,Kotlin進步巨大,帶來了更可靠的開發體驗。

作為一門新秀語言,Kotlin不僅支持編寫代碼在虛擬機上運行,而且還是一門跨平臺的通用型語言:你可以用Kotlin開發各種類型的原生應用,如macOS應用、Windows應用、JavaScript應用,當然還有Android應用。平臺獨立性意味著Kotlin有各種各樣的用途。

下面我們就來體驗一下Kotlin。

Kotlin應用開發初體驗

下面我們來學習使用IntelliJ IDEA開發首個Kotlin應用。藉此,來熟悉開發環境,創建Kotlin新項目,編寫並運行Kotlin代碼,以及查看輸出結果。本文創建的是一個沙盒項目,可演練代碼,以學習理解本文中的各種新概念。

一、安裝IntelliJ IDEA

IntelliJ IDEA是一套Kotlin集成開發環境。JetBrains公司創建了Kotlin語言並打造出了這套開發工具。開始學習前,請先訪問JetBrains公司網站https://www.jetbrains.com/idea/download,下載IntelliJ IDEA社區開發版軟件(見圖1)。

Kotlin應用開發初體驗

圖1 下載IntelliJ IDEA社區開發版軟件

下載完畢後,請參考https://www.jetbrains.com/help/idea/install-and-set-up-product.html網頁,完成對應平臺IntelliJ IDEA開發工具的安裝與配置。

IntelliJ IDEA簡稱IntelliJ,能幫助開發者編寫風格良好的Kotlin代碼。利用其內建工具,運行、調試、檢查以及重構代碼的整個開發過程能無縫銜接,一氣呵成。有鑑於此,我們推薦使用IntelliJ做Kotlin開發。若想進一步瞭解使用IntelliJ做Kotlin開發的理由,請接著往下閱讀。

二、第一個Kotlin項目

Kotlin語言及強大的開發環境都有了,接下來只剩一件事要做:學會流暢運用Kotlin語言。作為首個練手任務,我們來創建一個Kotlin項目。

啟動IntelliJ。如圖2所示,映入眼簾的是IntelliJ IDEA的歡迎界面。

Kotlin應用開發初體驗

圖2 歡迎界面

若非首次安裝使用,IntelliJ會直接打開上一個項目。要回到歡迎界面,選擇File → Close Project關閉項目即可。

單擊Create New Project選項,會看到如圖3所示的創建新項目對話框。

Kotlin應用開發初體驗

圖3 創建新項目對話框

在創建新項目對話框中,選擇左側的Kotlin選項,然後選擇右邊出現的Kotlin/JVM選項,結果如圖4所示。

Kotlin應用開發初體驗

圖4 創建一個Kotlin/JVM項目

除了Kotlin,IntelliJ還支持Java、Python、Scala以及Groovy等其他編程語言。選擇Kotlin/JVM就是告訴IntelliJ你要用Kotlin編程。更確切地講,就是要編寫面向並且在Java虛擬機上運行的Kotlin代碼。順便提一下,Kotlin還有個優勢:內置的工具鏈支持編寫能在不同操作系統和平臺上運行的Kotlin代碼。

(從現在起,提到Java虛擬機,都以Java開發社區常用的JVM來替代。後面還會介紹更多有關面向JVM的知識。)

單擊Next按鈕繼續。你會看到新項目設置界面,如圖5所示。輸入“Sandbox”作為項目名稱,IntelliJ會自動給出默認項目路徑。如有需要,可以單擊右側的…按鈕自定義項目路徑。在Project SDK的下拉框中點選Java 1.8,這樣,新項目就關聯上了JDK 8。

Kotlin應用開發初體驗

圖5 給新項目命名

你可能會問,編寫Kotlin程序為什麼需要JDK?答案就是,為了把Kotlin代碼轉譯為字節碼(稍後詳述),IntelliJ需要JDK提供JVM和Java工具。理論上講,JDK 6及其後的版本都能用,但是經驗表明,至本書撰稿之時,還是JDK 8用起來更順暢。

如果在Project SDK下拉框裡看不到Java 1.8,說明你還沒有安裝過JDK 8。繼續學習之前,請先訪問https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html,下載相應平臺的安裝包完成安裝,然後重啟IntelliJ使其生效。最後,按照前述步驟從頭開始創建新項目。

言歸正傳,確認新項目設置如圖5所示,然後單擊Finish按鈕。

如圖6所示,IntelliJ隨即創建一個名為Sandbox的新項目,並在默認的雙面板視圖裡顯示出來。反映在硬盤上,IntelliJ會在項目指定路徑創建一個文件夾、一系列子文件夾以及對應的項目文件。

Kotlin應用開發初體驗

圖6 默認的雙面板視圖

圖6中,左面板顯示的是項目工具窗口。右面板現在空著。待會你會看到,這裡會顯示編輯器窗口,供你查看和編輯Kotlin代碼文件。先來看左邊的項目工具窗口。單擊項目名稱Sandbox左側的展開箭頭,可以展現項目包含的文件,如圖7所示。

Kotlin應用開發初體驗

圖7 項目視圖

在IntelliJ中,項目

既包含我們應用的所有源代碼,也包含有相關的依賴和配置信息。項目可以分成一個或多個類似於子項目的模塊。新建項目默認含有一個模塊,對於簡單的Kotlin項目來說,一個就夠了。

如圖7所示,Sandbox.iml文件包含項目模塊的配置信息。.idea文件夾存放整個項目的設置文件,以及用戶在IDE中和項目交互相關的設置文件(例如,當前編輯器打開了哪個文件)。上述文件都是系統自動生成的,現在不用管它們。

External Libraries項包含項目依賴庫的信息。單擊展開該項,可以看到,IntelliJ已自動為項目添加了Java 1.8以及KotlinJavaRuntime依賴庫。

想了解更多有關IntelliJ項目結構的知識,請訪問JetBrains文檔網址:https://www.jetbrains.org/intellij/sdk/docs/basics/project_structure.html。

src文件夾用來存放為Sandbox項目創建的所有Kotlin代碼文件。好了,是時候來創建並編輯首個Kotlin代碼文件了。

1. 創建首個Kotlin文件

在項目工具窗口中,右擊src文件夾。如圖8所示,在彈出的菜單中,依次選擇New和Kotlin File/Class菜單項。

Kotlin應用開發初體驗

圖8 新建一個Kotlin文件

在New Kotlin File/Class對話框中,在Name處輸入文件名“Hello”,保持Kind處的File選項不變(見圖9)。

Kotlin應用開發初體驗

圖9 給Kotlin文件命名

單擊OK按鈕確認。如圖10所示,IntelliJ隨即新建了src/Hello.kt這樣一個項目文件,同時在IntelliJ右邊窗口的編輯器裡打開該文件。我們知道,.java後綴用於Java文件,.py後綴用於Python文件,同樣,.kt後綴說明新建文件存放著Kotlin代碼。

Kotlin應用開發初體驗

圖10 編輯器中的Hello.kt空文件

現在,可以開始編寫Kotlin代碼了。在Hello.kt編輯器中,動動手,輸入代碼清單1-1所示的代碼。

注意,本文中所有需要讀者輸入的代碼都顯示為粗體。

代碼清單1-1 “Hello,World!”Kotlin語言版(Hello.kt)

fun main(args: Array) {
 println("Hello, world!")
}

不太明白剛剛輸入的代碼?不要擔心,之後你一定能自然、流利地讀寫Kotlin代碼。現在只要大致知道是輸出“Hello,World!”字符串就可以了。

代碼清單1-1中的代碼定義了一個main新函數。函數實際就是一組可以稍後運行的代碼指令。

對於Kotlin語言來講,main函數有特別的意義。它是應用程序開始啟動的地方,又稱為應用程序入口點。Sandbox或任何應用程序要能運行,都必須定義這樣的入口點。

上述代碼中的main函數僅包含一條指令(也叫語句):println("Hello, world!")。println()也是個函數,內置於

Kotlin標準庫中。Sandbox應用程序一旦運行,println("Hello, world!")就會執行,IntelliJ隨即在屏幕上輸出圓括號中的Hello, world!字符串。

2.運行Kotlin文件

如圖11所示,一旦輸入完代碼清單1-1中的代碼,在第一行代碼左側,會出現一個綠色的運行按鈕

Kotlin應用開發初體驗

如果綠色運行按鈕沒出現,或者Hello.kt文件名或某段代碼下方被打上了紅色波浪線,則說明代碼有誤,請對照代碼清單1-1仔細核對修改。另外,如果看到Kotlin的紅藍K標誌也沒問題,它相當於運行按鈕。


Kotlin應用開發初體驗

圖11 運行按鈕

代碼無誤的話,Hello, world!應用程序就可以運行了。如圖12所示,單擊運行按鈕,選擇Run ‘HelloKt’菜單項。這相當於告訴IntelliJ,你想看著應用程序運行起來。

Kotlin應用開發初體驗

圖12 運行Hello.kt文件

應用程序運行時,IntelliJ就一行一行執行花括號({})裡的代碼,同時在IDE界面底部顯示兩個新工具窗口,如圖13所示。

Kotlin應用開發初體驗

圖13 運行和事件日誌工具窗口

圖13中,左邊是運行工具窗口,又叫控制檯(後續都這樣稱呼)。控制檯顯示IntelliJ執行應用程序時產生的各種信息,也包括應用程序本身的輸出。就本例來說,你會看到控制檯顯示Hello, world!字符串,還會看到標誌應用程序成功執行的語句:Process finished with exit code 0。這條語句會出現在控制檯各種輸出信息的最後。

macOS用戶可能會看到紅色的錯誤文本,指出JavaLauncherHelper有問題,如圖13所示。不要擔心。這是在macOS上安裝Java運行時環境的方式所帶來的副作用。要想移除它得費一番工夫,不過這個問題並沒有什麼影響,所以大可忽略它,繼續操作。

圖13中,右邊是事件日誌工具窗口。該窗口顯示IntelliJ為應用程序執行所做工作的相關信息。顯然,控制檯才是我們要關心的地方,所以事件日誌窗口後續不會再提起。(同理,你也不用管事件日誌窗口在應用程序運行時是否打開。)要關閉事件日誌窗口,單擊右上角的隱藏按鈕

Kotlin應用開發初體驗

即可。

編譯並運行Kotlin代碼

從點選Run ‘HelloKt’菜單項至控制檯輸出Hello, World!結果只需很短的時間,但後臺實際已忙活了不少事。

首先,IntelliJ使用kotlinc-jvm編譯器編譯Kotlin代碼。具體來講,就是把Kotlin代碼轉換為JVM語言:字節碼。轉換過程中,如有問題,kotlinc-jvm會報錯並給出排錯提示;一切順利的話,IntelliJ就進入執行階段。

在執行階段,kotlinc-jvm生成的字節碼會在JVM上執行。控制檯隨後會打印程序輸出,例如,在JVM一條條執行指令時,調用println()函數會輸出傳入其中的文字。

字節碼指令執行完畢後,JVM隨即終止。IntelliJ在控制檯顯示終止狀態,告訴用戶執行成功完成或是有錯並給出錯誤碼。

這裡要說的是,即使不能完全理解Kotlin的編譯過程,也不妨礙你閱讀本文及接下來的內容。

三、Kotlin REPL

就像拿張稿紙就某個計算一步步演算那樣,有時候,你可能需要測試一小段Kotlin代碼,看看運行結果如何。這在學習Kotlin語言時非常有用。幸運的是,IntelliJ就提供了這種工具,能夠實現無須創建文件就快速測試代碼。該工具叫作Kotlin REPL。稍後會解釋REPL的含義,現在先打開它,看看能用它做些什麼。

如圖14所示,在IntelliJ中,選擇Tools → Kotlin → Kotlin REPL打開Kotlin REPL工具窗口。

Kotlin應用開發初體驗

圖14 打開Kotlin REPL工具窗口

如圖15所示,IntelliJ會在底部顯示REPL窗口。

Kotlin應用開發初體驗

圖15 Kotlin REPL工具窗口

你可以在裡面輸入代碼,就像使用代碼編輯器一樣,但有一點不同:REPL不用編譯整個項目,就能立即給出結果。

在REPL中輸入代碼清單1-2所示的代碼。

代碼清單1-2 “Hello, Kotlin!”(REPL)

println("Hello, Kotlin!")

輸入完成後,按Command-Return(Ctrl-Return)組合鍵在REPL中執行代碼。如圖16所示,很快,你就會在下面看到Hello, Kotlin!輸出結果。

Kotlin應用開發初體驗

圖16 執行代碼

REPL是英文單詞read(讀取)、evaluate(求值)、print(輸出)和loop(循環)的首字母縮寫。整個運轉流程如下:在提示符下輸入一段代碼,然後單擊REPL左側的綠色運行按鈕或按Command-Return(Ctrl-Return)組合鍵提交。REPL讀取代碼,代碼求值(運行代碼),輸出

結果或副作用結果。運行完畢,REPL交回控制權,循環再次開始。

Kotlin之旅已然啟航!你在本文學了不少內容,已為進一步掌握Kotlin編程打下基礎。接下來可以繼續跟著《Kotlin編程權威指南》的第2章(在圖靈社區免費開放,點擊閱讀原文跳轉),繼續探索Kotlin語言的細節,學習如何使用變量、常量以及各種數據類型。

——本文內容節選自《Kotlin編程權威指南》

Kotlin應用開發初體驗

它源自大名鼎鼎的Big Nerd Ranch訓練營培訓講義,該訓練營已經為Google、Facebook、微軟等行業巨頭培養了眾多專業人才。通過搭建各種示例項目,在實踐中掌握Kotlin。

補充內容

四、深入學習:為什麼要用IntelliJ

任何文本編輯器都可以用來編寫Kotlin代碼,不過,我們推薦使用IntelliJ,尤其是在學習這門語言的時候。如同憑藉文字處理軟件的拼寫和語法檢查功能,能更輕鬆地寫出規範的文章一樣,IntelliJ也更便於編寫規範的Kotlin代碼。這主要體現在以下幾個方面。

  • 藉助語法高亮、內容提示和代碼自動補全等功能,你可以編寫出語法和語義正確的代碼。
  • 藉助應用程序運行時的斷點調試和實時代碼步進,你可以邊運行邊調試代碼。
  • 藉助重構快捷命令(如重命名、導出常量)以及清理縮進和空行的代碼格式化功能,你可以重構現有代碼。

而且,由於Kotlin和IntelliJ都出自JetBrains公司,它們之間的集成設計更為細緻周全,為用戶帶來了愉快的開發體驗。另外,Android Studio基於IntelliJ開發,所以使用IntelliJ時學會的快捷操作和工具都可以直接運用。

五、深入學習:面向JVM

JVM本質上是個軟件,它知道如何執行字節碼指令。“面向JVM”就是把Kotlin代碼編譯或轉譯成Java字節碼,以實現在JVM上運行,如圖17所示。

Kotlin應用開發初體驗

圖17 編譯和執行流程

Windows平臺也好,macOS平臺也罷,它們都有各自的指令集。JVM搭起了字節碼與不同軟硬件平臺間的橋樑,讀取字節碼並調用平臺特有的與之匹配的指令。顯然,不同軟硬件平臺有不同版本的JVM。這樣一來,Kotlin開發人員就可以編寫平臺獨立的程序代碼,無論什麼系統平臺,都可實現一次編寫,然後編譯成字節碼,在不同設備上執行。

既然能轉換成JVM可以執行的字節碼,Kotlin也就是JVM語言。作為首門JVM語言,Java最為知名。在後來者,如Scala和Kotlin語言中,開發人員揚長避短,已消除了“前輩”Java的一些弊端。

不過,Kotlin並未侷限於JVM。如今,Kotlin已能編譯成JavaScript,甚至能脫離虛擬機層,直接編譯成可以在Windows、Linux和macOS平臺上運行的原生二進制代碼。

六、挑戰練習:使用REPL研究Kotlin中的算數運算符

《Kotlin編程權威指南》很多章最後都配有挑戰練習。請獨立完成它們,以加深對Kotlin語言的理解,積累更多經驗。

使用REPL研究Kotlin中的+、-、*、/以及%這些算數運算符是如何工作的。例如,在REPL中,嘗試輸入(9+12)*2。結果符合預期嗎?

還想深入研究的話,可以看看https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.math/index.html網頁列出的Kotlin標準庫裡的數學函數,在REPL裡做做演練。例如,試試minOf (94, -99),求出最小值。

——

【圖靈教育】

閱讀改變世界,閱讀塑造人生

讓我們站在巨人的肩膀上,解鎖更多IT技能!


分享到:


相關文章: