Kotlin一步一步學(xué)(一) -- 基礎(chǔ)快速入門

前言

Kotlin竟终,2017年Google IO大會(huì)上并蝗,黃袍加身祭犯,一舉成為Google的親兒子。如果你現(xiàn)在問:做Android開發(fā)滚停,要學(xué)Kotlin嗎沃粗?百分之九十的人會(huì)告訴你要。你可能會(huì)冷笑一下键畴,呵呵最盅,老子的項(xiàng)目都是Java開發(fā),公司都沒有一個(gè)項(xiàng)目是Kotlin寫的。沒錯(cuò)涡贱,目前Kotlin在國(guó)內(nèi)的推廣力度沒有國(guó)外大咏删,幾年過(guò)去了,國(guó)內(nèi)很多公司還是抱緊Java大腿问词,沒有擁抱Kotlin督函。但是你如果有經(jīng)常上Google的Android開發(fā)者網(wǎng)站的話,你會(huì)發(fā)現(xiàn)很多新的東西戏售,都是用Kotlin給你寫demo了,然后GitHub上很多新的開源項(xiàng)目也直接用Kotlin擼了草穆。所以你敢不學(xué)Kotlin嗎?不學(xué)灌灾,你到時(shí)連抄別人的代碼,都不會(huì)抄了悲柱。

好了锋喜,吹了這么多,其實(shí)老子就是想引誘你學(xué)習(xí)Kotlin豌鸡。來(lái)吧嘿般,一步一步來(lái),試一下涯冠,用的不爽炉奴,你就退出Android界吧。而且要使用一門語(yǔ)言蛇更,也不是說(shuō)要學(xué)到非常精通才可以使用瞻赶,你只要學(xué)會(huì)了這門語(yǔ)言的基本語(yǔ)法后,就可以大膽的使用了派任,之后在使用的過(guò)程中不斷的進(jìn)入學(xué)習(xí)和研究就可以了砸逊。說(shuō)真的,一開始看Kotlin,確實(shí)有點(diǎn)別扭掌逛,但看多幾天师逸,你會(huì)發(fā)出真香的感慨,到處都是棉花糖(語(yǔ)法糖)豆混。

(手動(dòng)喘氣)吹不下去了篓像,系好安全帶,開車了皿伺。拿上你的Java大寶劍遗淳,去挑戰(zhàn)Kotlin吧!

可見修飾符

在 Kotlin 中一切都是默認(rèn)為 public 的心傀,而且Kotlin跟Java一樣屈暗,也有一套完整豐富的可見性修飾符。比如:private,protected,internal。它們都已不同的方式降低了數(shù)據(jù)的可見性养叛。來(lái)种呐,下面的代碼注釋會(huì)給你講明白這些。

//Demo.kt

//默認(rèn)的可見性都是public,所有文件都可見
val isVisible = true

//只在本文件(Demo.kt)中可見
priva val isHidden = true

//同 Module下的所有文件都可見
internal val almostVisible = true

class Sample{
    //默認(rèn)的可見性是public
    val isVisible = true
    
    //只對(duì)子類可見
    protected val isInheritable = true
    
    //僅對(duì)自己類可見
    private val isHidden = true
    
}

附上Java和Kotlin的修飾符的詳細(xì)對(duì)比

Java(默認(rèn)為 default)

修飾符 作用
public 所有類可見
default 同一包下的類可見
protected 子類可見
private 僅對(duì)自己類可見

Kotlin(默認(rèn)為 public)

修飾符 作用
public 所有類可見
internal 同 Module 下的類可見
protected 子類可見
private 僅對(duì)自己類可見

Elvis 操作符

在使用安全調(diào)用符調(diào)用可空變量中的成員方法或?qū)傩詴r(shí)弃甥,如果當(dāng)前變量為空爽室,則會(huì)返回一個(gè)null值,但有時(shí)即使當(dāng)前變量為null淆攻,也不想返回一個(gè)null值而是指定一個(gè)默認(rèn)值阔墩,此時(shí)該如何處理呢?Kotlin中提供了一個(gè)Elvis操作符(?:)瓶珊,通過(guò)Elvis操作符(?:)可以指定可空變量為null時(shí)啸箫,調(diào)用該變量中的成員方法或?qū)傩詴r(shí),返回一個(gè)默認(rèn)值或直接返回代碼塊伞芹。

//當(dāng)person為null時(shí)忘苛,設(shè)置person name默認(rèn)值為“unknown”
val name : String = person?.name ?: "unknown"

//當(dāng)person為null時(shí),直接返回
val age = person?.age ?: return

字符串String模板

Kotlin允許使用字符串模板來(lái)簡(jiǎn)化字符串格式化唱较。它可以使用"$變量名"或"${表達(dá)式}"直接在字符串中插入數(shù)值扎唾。

val language  = "Kotlin"

//text的值為Kotlin has 6 characters
val text = "$language has ${language.length} characters"

//Java中要實(shí)現(xiàn)同樣的效果,代碼為
//String text = language + "has" + language.length + "characters"

when 表達(dá)式

強(qiáng)大的判斷器南缓,Kotlin 的 when 表達(dá)式幾乎可以匹配任何的東西胸遇。比如:字面值,枚舉汉形,數(shù)字范圍狐榔,甚至可以調(diào)用任意函數(shù)等等!

fun getScore(name : String) : Int {
      return when (name) {
              "Li" -> 90   //name為L(zhǎng)i時(shí)获雕,返回值90
              "Cheng" -> 80   //name為Cheng時(shí)薄腻,返回值80
               else - > 0   //以上數(shù)據(jù)都配置不上時(shí),返回值0届案。
       }
}

如果我們不在when 語(yǔ)句中傳入?yún)?shù)的話庵楷,還可以這么寫:

fun getScore(name : String) : Int {
      return when {
              name == "Li" -> 90   //name為L(zhǎng)i時(shí),返回值90
              name == "Cheng" -> 80   //name為Cheng時(shí)楣颠,返回值80
              name == "Guo" -> 70   //name為Guo時(shí)尽纽,返回值70
              else - > 0   //以上數(shù)據(jù)都配置不上時(shí),返回值0童漩。
       }
}

你可能會(huì)覺得這種無(wú)參數(shù)的when語(yǔ)句寫起來(lái)比較冗余弄贿,沒必要這么寫,但是當(dāng)判斷條件不是同等類型的數(shù)據(jù)時(shí)矫膨,就必須使用這種寫法才能實(shí)現(xiàn)差凹。

以上面的例子為例期奔,假如名字以"Li"開頭的人,他的分?jǐn)?shù)都是90分以上危尿。這種場(chǎng)景如果用帶參數(shù)的when 語(yǔ)句來(lái)寫就無(wú)法實(shí)現(xiàn)呐萌,而使用不帶參數(shù)的when 語(yǔ)句就可以這樣寫

fun getScore(name : String) : Int {
      return when {
              name.startWith ("Li") -> 90   //name的開頭為L(zhǎng)i時(shí),返回值90
              name == "Cheng" -> 80   //name為Cheng時(shí)谊娇,返回值80
              name == "Guo" -> 70   //name為Guo時(shí)肺孤,返回值70
              else - > 0   //以上數(shù)據(jù)都配置不上時(shí),返回值0济欢。
       }
}

下一篇:Kotlin一步一步學(xué)(二) -- 標(biāo)準(zhǔn)函數(shù)和靜態(tài)方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末赠堵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子法褥,更是在濱河造成了極大的恐慌茫叭,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,188評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挖胃,死亡現(xiàn)場(chǎng)離奇詭異杂靶,居然都是意外死亡梆惯,警方通過(guò)查閱死者的電腦和手機(jī)酱鸭,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)垛吗,“玉大人凹髓,你說(shuō)我怎么就攤上這事∏犹耄” “怎么了蔚舀?”我有些...
    開封第一講書人閱讀 165,562評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)锨络。 經(jīng)常有香客問我赌躺,道長(zhǎng),這世上最難降的妖魔是什么羡儿? 我笑而不...
    開封第一講書人閱讀 58,893評(píng)論 1 295
  • 正文 為了忘掉前任礼患,我火速辦了婚禮,結(jié)果婚禮上掠归,老公的妹妹穿的比我還像新娘缅叠。我一直安慰自己,他們只是感情好虏冻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,917評(píng)論 6 392
  • 文/花漫 我一把揭開白布肤粱。 她就那樣靜靜地躺著,像睡著了一般厨相。 火紅的嫁衣襯著肌膚如雪领曼。 梳的紋絲不亂的頭發(fā)上鸥鹉,一...
    開封第一講書人閱讀 51,708評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音悯森,去河邊找鬼宋舷。 笑死,一個(gè)胖子當(dāng)著我的面吹牛瓢姻,可吹牛的內(nèi)容都是我干的祝蝠。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼幻碱,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼绎狭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起褥傍,我...
    開封第一講書人閱讀 39,342評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤儡嘶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后恍风,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蹦狂,經(jīng)...
    沈念sama閱讀 45,801評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,976評(píng)論 3 337
  • 正文 我和宋清朗相戀三年朋贬,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了凯楔。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,115評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锦募,死狀恐怖摆屯,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情糠亩,我是刑警寧澤虐骑,帶...
    沈念sama閱讀 35,804評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站赎线,受9級(jí)特大地震影響廷没,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜垂寥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,458評(píng)論 3 331
  • 文/蒙蒙 一颠黎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧矫废,春花似錦盏缤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至律杠,卻和暖如春潭流,著一層夾襖步出監(jiān)牢的瞬間竞惋,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工灰嫉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拆宛,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,365評(píng)論 3 373
  • 正文 我出身青樓讼撒,卻偏偏與公主長(zhǎng)得像浑厚,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子根盒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,055評(píng)論 2 355

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

  • 前言 人生苦多钳幅,快來(lái) Kotlin ,快速學(xué)習(xí)Kotlin炎滞! 什么是Kotlin敢艰? Kotlin 是種靜態(tài)類型編程...
    任半生囂狂閱讀 26,211評(píng)論 9 118
  • 基本類型: 數(shù)字 Double Float Long Int Short Byte 沒有隱式拓寬轉(zhuǎn)換,但...
    YuanchaoLi閱讀 536評(píng)論 0 2
  • Day1 可見性 參考 31 天册赛,從淺到深輕松學(xué)習(xí) KotlinKotlin實(shí)戰(zhàn) 在 Kotlin 中一切都是默認(rèn)...
    WangGavin閱讀 159評(píng)論 0 1
  • 簡(jiǎn)介 Kotlin 是一個(gè)基于 JVM 的新的編程語(yǔ)言钠导,由 JetBrains 開發(fā)。Kotlin可以編譯成Jav...
    面包石頭閱讀 5,415評(píng)論 0 52
  • 久違的晴天森瘪,家長(zhǎng)會(huì)牡属。 家長(zhǎng)大會(huì)開好到教室時(shí),離放學(xué)已經(jīng)沒多少時(shí)間了柜砾。班主任說(shuō)已經(jīng)安排了三個(gè)家長(zhǎng)分享經(jīng)驗(yàn)湃望。 放學(xué)鈴聲...
    飄雪兒5閱讀 7,523評(píng)論 16 22