Kotlin學(xué)習(xí)(一):基本語(yǔ)法

今天說(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é)果:

Paste_Image.png

可以看到編譯器報(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"

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末麻削,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子春弥,更是在濱河造成了極大的恐慌呛哟,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匿沛,死亡現(xiàn)場(chǎng)離奇詭異扫责,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)逃呼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)鸥昏,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人欠母,你說(shuō)我怎么就攤上這事杰刽。” “怎么了蔫缸?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵腿准,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拾碌,道長(zhǎng)吐葱,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任校翔,我火速辦了婚禮弟跑,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘防症。我一直安慰自己孟辑,他們只是感情好哎甲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著饲嗽,像睡著了一般炭玫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上貌虾,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天吞加,我揣著相機(jī)與錄音,去河邊找鬼尽狠。 笑死衔憨,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的袄膏。 我是一名探鬼主播践图,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沉馆!你這毒婦竟也來(lái)了码党?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤悍及,失蹤者是張志新(化名)和其女友劉穎闽瓢,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體心赶,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡扣讼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了缨叫。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片椭符。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖耻姥,靈堂內(nèi)的尸體忽然破棺而出销钝,到底是詐尸還是另有隱情,我是刑警寧澤琐簇,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布蒸健,位于F島的核電站,受9級(jí)特大地震影響婉商,放射性物質(zhì)發(fā)生泄漏似忧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一丈秩、第九天 我趴在偏房一處隱蔽的房頂上張望盯捌。 院中可真熱鬧,春花似錦蘑秽、人聲如沸饺著。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)幼衰。三九已至靴跛,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間塑顺,已是汗流浹背汤求。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工俏险, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留严拒,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓竖独,卻偏偏與公主長(zhǎng)得像裤唠,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子莹痢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容