今天說(shuō)一下Kotlin的基本語(yǔ)法,主要包括以下部分:
1.變量
2.操作符
3.函數(shù)
先來(lái)了解一下Kotlin代碼是什么樣子吧,這是一個(gè)HelloWorld
package com.oppo.demo.test //包的聲明
import java.util.* // 導(dǎo)包,這里可以導(dǎo)入Java類(lèi)慎冤,可以正常使用
/**
* 程序入口
*/
fun main(args: Array<String>) {
//輸出字符 代碼結(jié)尾不需要寫(xiě)分號(hào)
println("Hello world")
}
需要注意的是整葡,在Kotlin中姆打,不再向Java那樣良姆,代碼結(jié)尾不需要寫(xiě)“;”了
注釋
// 這是一個(gè)行注釋
/* 這是一個(gè)多行的
塊注釋。 */
/**
* 函數(shù)幔戏、類(lèi)注釋
*/
變量
在Kotlin中玛追,變量分為只讀變量和可變變量,聲明變量的方法也和Java不同闲延,和JS類(lèi)似
//只讀變量
val name = "小明" //自動(dòng)推斷出類(lèi)型
val age:Int = 22 // 明確類(lèi)型
val email:String //如果沒(méi)有初始值 則需要明確類(lèi)型
email = "hezhao_java@163.com"
//可變變量
var score = 90.5
score += 2
我們嘗試給name重新賦值痊剖,看看會(huì)出現(xiàn)什么結(jié)果:
可以看到編譯器報(bào)錯(cuò),所以:
- var - 用于定義可變變量
- val - 用于定義只讀變量
變量類(lèi)型慨代,和Java一模一樣
var b1:String //字符串
var b2:Char //字符
var b3:Int //整型
var b4:Double //雙浮點(diǎn)
var b5:Float //浮點(diǎn)數(shù)
var b6:Byte //字節(jié)
var b7:Long //長(zhǎng)整型
var b8:Boolean //布爾
使用可空值及 null 檢測(cè)
開(kāi)發(fā)過(guò)Java的人都知道邢笙,程序報(bào)異常了,打開(kāi)控制臺(tái)一看侍匙,你肯定能看到NullPinterException的存在氮惯。Kotlin的類(lèi)型設(shè)計(jì)系統(tǒng)旨在消滅“空指針異常”想暗,那么是怎么做到的呢妇汗?
正常情況下,變量都不允許直接賦值為null说莫,比如以下這段代碼是錯(cuò)誤的:
fun returnNull():String{
return null //error杨箭,不能賦null值
}
或者
var str:String
str = null //error
那么,有時(shí)候我們確實(shí)需要返回null值储狭,要怎么做呢互婿?
當(dāng)某個(gè)變量的值可以為 null 的時(shí)候,必須在聲明處的類(lèi)型后添加 ? 來(lái)標(biāo)識(shí)該引用可為空辽狈。
fun returnNull():String?{
return null
}
//變量也是一樣
var str:String?
str = null
值得注意的是慈参,當(dāng)我們使用一個(gè)可空變量的時(shí)候,編譯器會(huì)報(bào)一個(gè)錯(cuò)刮萌,它會(huì)認(rèn)為這是不安全的驮配,這種情況下我們需要自己去做類(lèi)型檢查
if(str != null)
println(str.length)
或者
var str:String? = returnNull()
if(str == null){
return
}
//// 在空檢測(cè)后,str 會(huì)自動(dòng)轉(zhuǎn)換為非空值
println(str.length)
以上這段代碼可以簡(jiǎn)寫(xiě)為:
//變量也是一樣
var str:String? = returnNull() ?: return
//// 在空檢測(cè)后着茸,str 會(huì)自動(dòng)轉(zhuǎn)換為非空值
println(str.length)
這里涉及到了操作符的問(wèn)題
那么壮锻,這里說(shuō)一下Kotlin一些新的操作符
1.安全調(diào)用操作符
var length =str?.length
如果當(dāng)str不為null時(shí)候就會(huì)返回str.length,否則返回null涮阔。
2.Elvis操作符
val length2 = str?.length ?: -1
如果當(dāng)str不為null時(shí)候就會(huì)返回str.length猜绣,否則返回-1。
3.!!操作符
val length3 = str!!.length
如果當(dāng)str不為null時(shí)候就會(huì)返回str.length澎语,否則干脆拋出空指針異常途事。
依我看验懊,這個(gè)操作符還是少用吧擅羞。尸变。。
同樣减俏,也適用于類(lèi)型轉(zhuǎn)換
//類(lèi)型轉(zhuǎn)換 如不成功給個(gè) null
val s = "1"
val s1: Int? = s as? Int
函數(shù)
函數(shù)使用fun來(lái)定義召烂,缺省返回值為Unit,類(lèi)似于Java中的void
下面列出幾種常見(jiàn)的函數(shù)定義
沒(méi)有返回值的函數(shù)
fun printSum(a: Int, b: Int): Unit {
println("sum of $a and $b is ${a + b}")
}
//可以省略Unit
fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
明確返回值類(lèi)型函數(shù)
fun sum(a: Int, b: Int): Int {
return a + b
}
自動(dòng)推斷返回值的函數(shù)
fun sum(a: Int, b: Int) {
return a + b
}
簡(jiǎn)寫(xiě)的函數(shù)
fun sum(a: Int, b: Int) = a + b
//這里娃承,可以使用if作為表達(dá)式
fun calc(a: Int, b: Int) = if(a > b) a+b else a-b
可返回null的函數(shù)
fun returnNull():String?{
return null
}
以上就是奏夫,今天學(xué)習(xí)的內(nèi)容,后續(xù)再說(shuō)選擇結(jié)構(gòu)历筝、表達(dá)式酗昼、循環(huán)結(jié)構(gòu) 等。
以上資料梳猪,有部分參考自:kotlin入門(mén)之"null"