全域變數

      在〈全域變數〉中尚無留言

全域變數一直是個爭議。有的學者說能不用就不用,但為了可讀性及維護,還是有需求的。

本篇其實也可以命名為static 變數(類別變數)。但因kotlin沒有static關鍵字,所以就命名為全域變數

頂級(Top Level)

Java規定所有程式碼都要寫在class之內,但到了Jdk9,class之上還有module(模組)。這種寫法稱為純物件導向程式語言。kotlin呢? 沒這麼多限制,可以直接寫在.kt檔之中。所以kotlin不是純物件導向語言。

早期大家都會爭議Java是純物件導向,而C++不是純物件導向。但現在只求好用好寫且方便,誰管你純不純。

寫在class之外的變數,稱為top level property(頂級屬數)
寫在class之外的函數,稱為top level function(頂級函數)

首先在src目錄按右鍵 -> New -> Kotlin class/File -> File,再填入檔名G,即可產生G.kt檔。然後寫入如下代碼

var name:String="thomas"
var password:String="1234"
fun randInt(s:Int, e:Int):Int{
return (Math.random()*(e-s+1)).toInt()+s
}

接著在main.kt寫入如下

fun main(args:Array<String>){
var p1=Pokemon()
}
class Pokemon{
init{
println("name : %s, password : %s".format(name, password))
println(randInt(0,6))
}
}
結果:
name : thomas, password : 1234
0

方便吧,連import都不用耶,就可以直接用其他檔案(G.kt)裏的頂級變數及函數

object

object是一個關鍵字,這個關鍵字產生了這個類別,也同時產生了一個且是唯一的物件。而且這個類別不能有任何的建構子,也不能被其他地方產生物件。

fun main(args:Array<String>){
var p1=Pokemon()
}

object G{
var name:String="thomas"
var password:String="1234"
fun randInt(s:Int, e:Int):Int{
return (Math.random()*(e-s+1)).toInt()+s
}
}

class Pokemon{
init{
println("name : %s, password : %s".format(G.name, G.password))
println(G.randInt(0,6))
}
}

上述G的用法,但表面上看起來像是Java的static(類別方法及類別變數),但骨子裏實際是產生一個物件,也叫G,然後再由物件G去存取裏面的變數。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *