Kotlin Tutorial(2)10分鐘認識Kotlin << 前情
程式基本架構與基礎
Kotlin原始程式碼檔案的附加檔案為「kt」,檔案名稱的部份是依照程式用途取的名稱。原始程式碼裡面可以加入註解,例如下面這個全部是註解的程式碼:
/* HelloComment.kt */
/*
使用「/*」開始與「*/」結束,裡面的內容都是註解
這種用法通常稱為多行註解
*/
/* HelloComment.kt */
/*
後面的程式碼都使用上面的註解告訴你程式碼的目錄
如果前面沒有套件名稱,表示它放在「src」的根目錄
*/
// 使用「//」開始的內容稱為單行註解
// 註解在編譯與執行的時候都會忽略
// 這個程式除註解以外什麼都沒有
一個需要執行一些工作的程式碼,並不需要宣告類別,只需要宣告程式的進入點「main」函式就可以了。剛開始學習Kotlin程式語言,會經常使用顯示訊息的函式。例如下面的程式碼:
/* HelloMainFun.kt */
// Kotlin程式的進入點,只有「args」可以改變為其它自己取的名稱,其它都是固定的
// IntelliJ IDEA偵測到Kotlin程式的進入點,會在左側顯示Kotlin圖示
// main函式的範為從「{」開始,到「}」結束,通常稱為區塊(block)
// 把需要執行的敘述寫在main函式區塊裡面
fun main(args: Array<String>) {
// 使用Kotlin的println函式顯示左右括號裡面的內容到終端機
// 現在左右括號裡面是使用雙引號(")包圍的字串(String)
// 一個敘述的最後面不需要使用分號(;)
println("main function")
// println的左右括號裡面沒有東西,執行後只會換行
println()
// 如果在同一行寫多個敘述,就要使用分號隔開
println(1); println(2); println(3)
// println是顯示並換行,print是只有顯示不換行
// 如果顯示的訊息是一般的數學運算,就不要使用雙引號
print("1+1");print(2+2);print(3+3)
}
執行HelloMainFun.kt以後顯示下面的訊息:
main function
1
2
3
1+146
- Java老手:
- Kotlin不一定需要宣告類別
- 敘述的最後面不需要使用分號(;)
在終端機顯示訊息
Kotlin提供許多函式、類別與其它應用的程式庫,需要在終端機顯示訊息,使用Kotlin內建的println與print函式,兩個的差異在顯示訊息後會不會換行。雖然在終端機顯示訊息的功能,在開發應用程式的時候不太會用到,例如Android App。不過在初學Kotin的階段,可以很方便執行一些測試的工作。
下面的範例程式碼示範在終端機顯示訊息的作法:
/* HelloPrint.kt */
fun main(args: Array<String>) {
// 顯示字串
println("String message")
// 顯示計算結果
println(35 * 60)
// 使用+號連接字串與計算結果
println("I am " + (35 * 12) + " months old.")
// 上面的工作建議使用下面這種「string template」的作法
// 在字串裡面使用「${數字、計算或其它資料}」
// Kotlin依照「${」和「}」之間的內容,執行計算與替換
println("I am ${35 * 12} months old.")
}
- 相關內容:
- String template在後面的內容會繼續說明各種不同的用法
- Java老手:
- 不建議在Kotlin使用+號連接字串
- Kotlin的String template跟Java的String.format()類似,不過更簡單、好用
套件與原始程式碼
剛開始學習Kotlin的時候,寫的程式會表較簡單一些,通常是一個包含main函式的程式碼。不過以後實際開發應用程式專案的時候,通常會有許多程式碼檔案,瞭解套件(package)與匯入(import),為應用程式規劃好目錄,會是比較好的作法。
在建立Kotlin應用程式專案以後,如果需要建立套件,在「src」目錄上按滑鼠右鍵,選擇「New -> Package」:
在對話框輸入套件名稱,使用句點(.)分開不同的階層目錄,例如「net.macdidi5.basic」,表示建立一個有三層目錄的套件:
完成後就可以在「src」目錄看到建立好的套件目錄:
程式碼最好是依照它們的功能,分類放在各自的套件。建立好應用程式專案的套件以後,如果需要在套件下新增程式碼,在套件目錄上(src/net.macdidi5.basic)按滑鼠右鍵,選擇「New -> Kotlin File/Class」,輸入程式碼名稱建立一個新的Kotlin程式,例如「HelloPackage」,IntelliJ IDEA會在建立的程式碼自動加入package的宣告:
使用其它套件的程式碼
一個應用程式裡面的程式碼,應該要依照規劃放在各自的套件目錄裡面,例如下面的程式碼:
/* net.macdidi5.other.HelloOther.kt */
// 套件的宣告與程式碼檔案目錄都一樣
// 這是比較建議的作法
package net.macdidi5.other
// 一個計算平均的函式
fun average(vararg nums: Int): Int {
var total: Int = 0
for (n in nums) {
total += n
}
return total / nums.size
}
如果沒有什麼特殊的原因(例如偷懶),就不建議使用下面程式碼的作法:
/* Hello.kt */
// 雖然這個程式檔放在應用程式專案的根目錄
// 不過它使用package加入套件的宣告
// 在程式碼裡面宣告的內容,也是屬於net.macdidi5.root套件
package net.macdidi5.root
// 一個加總整數的函式
fun summary(vararg nums: Int): Int {
var total: Int = 0
for (n in nums) {
total += n
}
return total
}
程式碼在使用package宣告套件以後,不管有沒有放在套件目錄下,程式碼裡面寫的內容就屬於宣告的套件。如果需要使用其它套件的內容,例如呼叫函式,就必須使用包含套件的完整名稱:
/* net.macdidi5.basic.HelloPackage.kt */
package net.macdidi5.basic
fun main(args: Array<String>) {
// 呼叫在其它套件的函式,必須在函式名稱前面加上套件名稱
val t = net.macdidi5.root.summary(3, 5, 7)
println("Total: $t")
val a = net.macdidi5.other.average(3, 5, 7)
println("Average: $a")
}
上面的作法會讓程式碼變得比較多一些,所以需要使用其它套件的內容,建議使用「import」敘述:
/* net.macdidi5.basic.HelloPackage02.kt */
package net.macdidi5.basic
// 使用import設定在某個套件的函式
import net.macdidi5.other.average
import net.macdidi5.root.summary
fun main(args: Array<String>) {
// 呼叫的時候就可以省略函式名稱前面的套件名稱
val t = summary(3, 5, 7)
println("Total: $t")
val a = average(3, 5, 7)
println("Average: $a")
}
比較上面兩個範例,使用「import」敘述的程式碼看起來簡單多了。import敘述有下面兩種語法:
排除程式碼的錯誤
使用開發工具撰寫Kotlin程式碼的時候(例如IntelliJ IDEA),如果不小心打錯了,開發工具的提示通常會很明顯。例如下面這個錯誤的範例程式碼畫面:
程式碼錯誤的地方,會變成紅色的字體,左側的專案目錄,也會使用紅色的底線標示錯誤的程式碼檔案,還有包含錯誤程式碼檔案的套件。你可以把滑鼠游標移到程式碼錯誤的地方,IntelliJ IDEA就會顯示錯誤的提示:
上面的錯誤訊息顯示「Unresolved reference: Print」,因為Kotlin程式設計語言是區分大小寫的,所以Kotlin告訴你沒有這樣的函式可以使用。
這個錯誤的範例程式碼的另一個問題,是少打了右刮號,滑鼠游標移到錯誤的地方後,會顯示下面的畫面:
上面的錯誤訊息顯示「Expecting ')'」,這類的錯誤會提示你缺少的部份,例如這個範例放在單引號裡面的右刮號。
如果你沒有發現錯誤,執行有錯誤的程式碼,IntelliJ IDEA會在訊息區塊顯示所有的錯誤,使用滑鼠選擇錯誤訊息後,游標會移到動到發生錯誤的地方:
訊息區塊使用下面個格式顯示錯誤:
Error:(錯誤行號, 錯誤位置) Kotlin: 錯誤訊息
下一步
瞭解Kotlin程式設計基礎,還有認識如何在終端機顯示訊息後,接下來準備認識基本的資料型態與變數,它幾乎是所有程式設計語言共同的基礎,所以當然很重要。
相關的檔案都可以在GitHub瀏覽與下載。
http://github.com/macdidi5/Kotlin-Tutorial
後續 >> Kotlin Tutorial(4)基本型態與變數
|