1聲明變量和內置數據類型
fun main(){
var str:String = "Hello world"
//var a:Int = 5
println(str)
}
2只讀變量
要聲明可修改變量,使用var關鍵字
要聲明只讀變量,使用val關鍵字
fun main(){
val name:String = "jack"
var age:Int = 10;
age+=1;
println(name)
}
val 也不是絕對不能修改的(後面)
3類型推斷
對於已經聲明並賦值的變量,他允許你省略類型定義
fun main(){
var str = "Hello world"
println(str)
}
4編譯時常量
只讀變量並非絕對只讀;
編譯時常量只能在函數外定義(包括main函數),因爲編譯時常量必須在編譯時賦值,而函數都是在運行時才調用,函數內的變量也是在運行時賦值,編譯時常量要在這些變量賦值之前就已存在;
編譯時常量只能是常見的基本數據類型:String、Int、Double、Float、Long、Short、Byte、Char、Boolean
const val MAX = 200
fun main(){
val a = 5;
println(a)
}
5查看kotlin字節碼
兩種方式
1shift鍵兩次 輸入 show kotlin
2Tools->Kotlin->Show Kotlin Bytecode
6Kotlin引用類型與基本數據類型
java 有兩種數據類型:引用類型和基本數據類型
Kotlin只提供引用類型這一種數據類型,出於更高性能的需要,Kotlin編譯器會在java字節碼中改用基本數據類型。
7表達式(range)
if/else if 表達式
range表達式
in A...B,in關鍵字用來檢查某個值是否在指定範圍之內
when表達式
允許你編寫條件式,在某個條件滿足時,執行對應的代碼
只要代碼包含else if分支,都建議改用when表達式
fun main(){
val age = 4
if(age in 0..3){
println("嬰幼兒")
}else if(age in 4..12)
println("少兒")
}else{
println("未知")
}
if(age !in 1..3){
println("..!in.")
}
8表達式(when)
fun main(){
val school= "小學"
val level:Any = when(school){
"學前班" -> "幼兒"
"小學" -> "少兒"
"中學" -> "青少年"
else -> {
println("未知")
}
}
println(level)
}
9String模板
模板支持在字符串的引號內放入變量值
還支持字符串裏計算表達式的值並插入結果,添加在${}中的任何表達式,都會作爲字符串的一部分求值。
fun main(){
val origin="jack"
val dest = "rose"
println("$origin love $dest")
val flag = false
println("Answer is: ${if(flag)"我可以" else "對不起"}")
}
10函數頭
fun main(){
println(doSomething(5,false))
}
private fun doSomething(age:Int,flag:Boolean):String{
return "result"
}
11函數參數,默認值參
不打算傳入參數,可以與先給參數指定默認值
fun fix(name:String,age:Int = 2){
println(name+age)
}
fun main(){
fix("jack")
}
12具名函數參數
如果使用命名值參,就可以不用管值參的順序
fun fix(name:String,age:Int = 2){
println(name+age)
}
fun main(){
fix(age=4,name="jack")
}
13Unit函數
不是所有函數都有返回值,Kotlin中沒有返回值的函數叫Unit函數,也就是說他們的返回類型是Unit。在Kotlin之前,函數不返回任何東西用void描述,意思是“沒有返回類型,不會帶來什麼,忽略他”,也就是說如果函數不返回任何東西,就忽略類型。但是,void這種解決方案無法解釋現代語言的一個重要特性:泛型。
fun fix(name:String,age:Int = 2){
println(name+age)
}
fun main(){
println( fix(age=10,name="Rose"))
}
14Nothing類型
TODO函數的任務就是拋出異常,就是永遠別指望他能運行成功,返回Nothing類型
fun fix(name:String,age:Int = 2){
println(name+age)
TODO("nothing")
println("after nothing.")
}
fun main(){
println( fix(age=10,name="Rose"))
}
15反引號中的函數名
Kotlin可以使用空格和特殊字符對函數命名,不過函數名要用一對反引號括起來。
爲了支持Kotlin和java交互操作,二Kotlin和java各自卻有着不同的保留關鍵字,不能作爲函數名,使用反引號擴住函數名就能避免任何衝突
fun `**~special function with weird name**`(){
println("i am weird")
}
fun main(){
`**~special function with weird name**`()
}