kotlin入門潛修之開門篇—kotlin是什么?

本文收錄于 kotlin入門潛修專題系列,歡迎學(xué)習(xí)交流兜粘。

創(chuàng)作不易申窘,如有轉(zhuǎn)載,還請備注孔轴。

kotlin是一門什么樣的編程語言剃法?

kotlin是一種運(yùn)行在java虛擬機(jī)上的靜態(tài)編程語言,和java一樣距糖。有些朋友聽到j(luò)ava虛擬機(jī)可能會反射性的想到那不是java專有的嗎玄窝?當(dāng)然不是,實際上任何能夠編譯成符合java虛擬機(jī)規(guī)范的語言都能運(yùn)行到j(luò)vm上悍引。koltin正是滿足這一要求的語言。kotlin可以完全兼容java語法帽氓,因此學(xué)習(xí)的時候可以類比于java趣斤。

起源

2011年,JetBrains推出了kotlin項目黎休。我們知道JetBrains浓领,應(yīng)該就是其開發(fā)的、大名鼎鼎的idea系列ide势腮。是的联贩,JetBrains之所以要推出kotlin,就是在滿足和java一樣編譯速度的時候捎拯,提供更多的語言新特性泪幌。這些語言特性解決了java語言的很多缺陷。

正式基于這些思想署照,JetBrains于2016年2月15日正式發(fā)布了第一個官方穩(wěn)定版本V1.0祸泪,并從該版本開始向后兼容。

當(dāng)然建芙,對kotlin影響最大的就是2017年在google I/O大會上没隘,google正式宣布kotlin成為Android官方開發(fā)語言。這則消息在android開發(fā)界引起不小的轟動禁荸,可以認(rèn)為自此之后kotlin真正的進(jìn)入了大眾化視野右蒲。

kotlin有哪些新特性?

這里簡單的感知下kotlin中的一些新特性赶熟,具體將會在接下來的文章中慢慢闡述瑰妄。

語法

kotlin的語法受到了眾多語言(如java、javascript钧大、groovy等)的影響翰撑,并在此基礎(chǔ)上優(yōu)化了實現(xiàn)方案,提供了很多極其簡潔的寫法。比如kotlin是一門面向?qū)ο蟮恼Z言眶诈;kotlin不再強(qiáng)制語句結(jié)尾處必須寫上分號(;)涨醋;kotlin支持使用字符串模板;kotlin能有效避免java中人人詬命的空指針問題等等逝撬。

語法特性先知

這里先大概介紹kotlin中的部分語言特性浴骂,后面的文章都會詳細(xì)闡述。

常量和變量

kotlin中常量的定義關(guān)鍵字是val(全稱value)宪潮,變量的定義關(guān)鍵字是var(全稱variable)溯警,如下:

val a : Int = 1//常量a,無法再次進(jìn)行賦值
var x = 2//變量x狡相,可以再次進(jìn)行賦值
x = a//為變量x賦值

上面也看出來kotlin變量或者常量的定義已經(jīng)和java完全不一樣梯轻,kotlin中變量的定義都要以var關(guān)鍵字開頭,而常量的定義都要以val關(guān)鍵字開頭尽棕,之后跟著的是變量或者常量名喳挑,然后是冒號,最后才是真正的類型滔悉。這就是kotlin定義變量或者常量的語法格式伊诵。實際上kotlin是很智能的,通常我們可以省略真正的類型回官,因為kotlin會自動進(jìn)行推斷曹宴,如下所示:

val a = 1//編譯器自動推斷a為整型

方法

kotlin中使用fun關(guān)鍵字來定義方法,語法格式如下:

fun 函數(shù)名(入?yún)?:類型歉提,入?yún)?:類型笛坦,...): 返回值{}

具體示例如下:

fun sum(a: Int, b: Int): Int {}

那么kotlin中程序的入口方法該怎么定義呢?其實同java一樣唯袄,kotlin的入口程序也是函數(shù)名為main的靜態(tài)方法弯屈,只不過寫法有所不同,kotlin中main的入口方法有兩種寫法(注意下面寫法位于同一個文件中):

//伴隨對象形式的寫法恋拷,@JvmStatic標(biāo)識為靜態(tài)類型资厉,這種寫法和java中的main方法寫法完全一致。
class Main {
    companion object {
        @JvmStatic fun main(args: Array<String>) {
        }
    }
}

//寫法2蔬顾,top-level級別的
fun main(args: Array<String>) {
}

上面展示了兩種程序入口main方法的寫法宴偿,后面有文章會再加闡述。

方法擴(kuò)展

這個方法擴(kuò)展和C#诀豁、javascript類似窄刘,都是無需在繼承該類的情況下,擴(kuò)展該類的功能舷胜。
示例如下:

fun String.lastChar(): Char = get(length - 1)

這個擴(kuò)展了String類娩践,即增加了一個lastChar方法,這樣以后所有字符串都可以這么用。如下所示:

println("hello word".lastChar())//打印 'd'

基于函數(shù)擴(kuò)展翻伺,kotlin還可以進(jìn)行運(yùn)算符重載
如下所示:

//Point類
class Point(val x: Int, val y: Int) {
    override fun toString(): String {//這里重寫了toString材泄,方便println打印數(shù)據(jù)。
        return "x = " + x + "; y = " + y
    }
}
//重載運(yùn)算符
operator fun Point.plus(other: Point): Point {
    return Point(this.x + other.x, this.y + other.y)
}

class Main {
    companion object {
        @JvmStatic fun main(args: Array<String>) {
            val p1 = Point(1, 2)
            val p2 = Point(2, 3)
            println(p1 + p2)//打印'x = 3; y = 5'
        }

    }
}

上面即是運(yùn)算符重載吨岭,這里先知道即可拉宗,后文有文章闡述。

如何解決java中的空指針辣辫?

kotlin有項語言特性旦事,可以有效避免java中控制很,示例如下:

var str :String? = null//注意String后面的問號急灭,這標(biāo)明str變量可為null姐浮,否則就無法賦值為null
var str: String = null//編譯錯誤,String需要定義為String?
val len = str?.length//注意str?寫法化戳,這表示单料,只有當(dāng)str不為null的時候才獲取str的length
val len = str!!.length//注意str!!寫法,這個種寫法表示点楼,當(dāng)str為空時就會直接拋出異常

kotlin還有更多的新特性,如:

構(gòu)造方法 vs 二級構(gòu)造方法

高階方法與lambda

解構(gòu)聲明

類相關(guān)

函數(shù)嵌套

等等...

這些特性都會在本專題的文章中一一闡述白对。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掠廓,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甩恼,更是在濱河造成了極大的恐慌蟀瞧,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,548評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件条摸,死亡現(xiàn)場離奇詭異悦污,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)钉蒲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,497評論 3 399
  • 文/潘曉璐 我一進(jìn)店門切端,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人顷啼,你說我怎么就攤上這事踏枣。” “怎么了钙蒙?”我有些...
    開封第一講書人閱讀 167,990評論 0 360
  • 文/不壞的土叔 我叫張陵茵瀑,是天一觀的道長。 經(jīng)常有香客問我躬厌,道長马昨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,618評論 1 296
  • 正文 為了忘掉前任,我火速辦了婚禮鸿捧,結(jié)果婚禮上屹篓,老公的妹妹穿的比我還像新娘。我一直安慰自己笛谦,他們只是感情好抱虐,可當(dāng)我...
    茶點故事閱讀 68,618評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著饥脑,像睡著了一般恳邀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上灶轰,一...
    開封第一講書人閱讀 52,246評論 1 308
  • 那天谣沸,我揣著相機(jī)與錄音,去河邊找鬼笋颤。 笑死乳附,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伴澄。 我是一名探鬼主播赋除,決...
    沈念sama閱讀 40,819評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼非凌!你這毒婦竟也來了举农?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,725評論 0 276
  • 序言:老撾萬榮一對情侶失蹤敞嗡,失蹤者是張志新(化名)和其女友劉穎颁糟,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體喉悴,經(jīng)...
    沈念sama閱讀 46,268評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡棱貌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,356評論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箕肃。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片婚脱。...
    茶點故事閱讀 40,488評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖突雪,靈堂內(nèi)的尸體忽然破棺而出起惕,到底是詐尸還是另有隱情,我是刑警寧澤咏删,帶...
    沈念sama閱讀 36,181評論 5 350
  • 正文 年R本政府宣布惹想,位于F島的核電站,受9級特大地震影響督函,放射性物質(zhì)發(fā)生泄漏嘀粱。R本人自食惡果不足惜激挪,卻給世界環(huán)境...
    茶點故事閱讀 41,862評論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望锋叨。 院中可真熱鬧垄分,春花似錦、人聲如沸娃磺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,331評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽偷卧。三九已至豺瘤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間听诸,已是汗流浹背坐求。 一陣腳步聲響...
    開封第一講書人閱讀 33,445評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留晌梨,地道東北人桥嗤。 一個月前我還...
    沈念sama閱讀 48,897評論 3 376
  • 正文 我出身青樓,卻偏偏與公主長得像仔蝌,于是被迫代替她去往敵國和親泛领。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,500評論 2 359

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