「如果有一天,我也寫函式庫,要怎麼分享呢?」詩憶好奇的問。
唯心笑了笑。「首先要先定義package name呢。還記得之前寫網路連線的import okhttp3.OkHttpClient嗎?後面的okhttp3.OkHttpClient就是該函式的package name。」
詩憶疑惑。「沒有package name也能寫函式的話,為什麼要package name呢?」
「package name很類似資料夾的概念,okhttp3.OkHttpClient可以想成okhttp3資料夾下的OkHttpClient檔案。如果都沒有package name,那同樣名稱的檔案不就衝突了嗎?」唯心解釋。
「原來是這樣啊。那package name也盡量要取的比較不容易和其他人重複囉?」
「是呀,但是也不要取一些沒有意義的名字,這樣要搜尋的時候不是很容易呢。package name一般都是二到四個層級,第一個會放組織,比如公司就會放com或co,但我們只是作業就放學號吧;第二個通常就放專案名稱,第三個可以放功能,所以即使是同個函式庫也能擁有多個package name成員,但函式庫外層需要獨一無二的artifact id。」
詩憶寫了幾個備選package name,最後決定統一用u1234567.exercise開頭,宣告放在檔案第一行。
pacakge u1234567.exercise
fun main() {
}
「對了,同一層的package之間的檔案可以直接互相引用類別和函式,但是有標注private存取修飾詞的除外。至於其他層的檔案都要寫import喔。如果想要匯入多層package,可以使用.*的做法。但是如果匯入太多沒有用到的函式庫,只是徒增建置所花的時間和建置檔案的大小唷。」
import u1234567.exercise.*
詩憶突然想到。「基本函式庫都不用匯入耶?」
「是的,都存放在預設區,建置的時候能直接引用。基本函式庫有很多呢。」唯心如此說著。
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*