「如果有一天,我也寫函式庫,要怎麼分享呢?」詩憶好奇的問。
唯心笑了笑。「首先要先定義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.*