Kotlin編程之路——基本語法

我們寫的代碼片段可以在這里運行測試 測試代碼地址

Kotlinvarval的區(qū)別

在Kotlin中的 var 和 val 是屬于關(guān)鍵字翻翩,乍看它倆很相似饲漾,因為只是差一個字母而已福荸,可是區(qū)別卻很大。
var是作為可變變量搜锰,這是一個可以通過重新分配來更改為另一個值的變量缭乘。這種聲明變量的方式和Java中聲明變量的方式一樣司蔬。

先來看下這段用var作為可變變量的代碼

fun main(args: Array<String>) {
    var name = "hongfa"  
    println(name)  
    name = "==hongfa=="  
    println(name)  
}

運行后的結(jié)果邑茄,運行正常,說明var確實是作為可變變量俊啼。

image.png
val是一個只讀變量肺缕,這種聲明變量的方式相當于Java中的final變量。一個val創(chuàng)建的時候必須初始化。
fun main(args: Array<String>) {
 val finalValue = "我是不可改變的"
 finalValue = "我就是要改變你"; 
 println(finalValue)   
}

運行后的結(jié)果搓谆,看到?jīng)]有,運行的時候報錯了豪墅,提示cannot be reassigned(不能重新分配),通過這么個例子泉手,我們可以很快的就了解并記住了他們的區(qū)別。


image.png

認識了 var 和 val 變量后偶器,接下來就開始我們的第一個函數(shù)吧斩萌,廢話不多說,上來就是干屏轰,直接上代碼颊郎。

函數(shù)表達式

先來看下一個函數(shù)的返回值與無返回值是什么樣的寫法,kotlin中定義一個函數(shù)是使用fun作為關(guān)鍵字去聲明函數(shù)

無返回值的函數(shù)
//默認無返回的函數(shù)
fun method(){
 println("沒有返回值");
}
帶返回值的函數(shù)霎苗,下面來一個String類型和Int類型的函數(shù)
//String類型
fun method() :String{
    return "我是有返回值的";
}
//Int類型,這里有個區(qū)別姆吭,Java中int都是小寫的,而Kotlin里面的Int首字母是大寫的唁盏。
fun method() :Int{
    return 0;
}
接下來看下無參和有參的函數(shù)是怎么定義的
無參的函數(shù)
//測試函數(shù)
fun test(){
    println("無參的函數(shù)");
}
有參函數(shù)内狸,默認是無返回值的
fun add(var a: Int,var b: Int){
     println("有參的函數(shù)");
}
帶返回值的有參函數(shù)
fun add(a: Int, b: Int): Int{
 return a + b;
}

單表達式 函數(shù)


fun result() =1;

//等價于
fun result(): Int {
  return 1;
}
//如果是這樣子的話厘擂,可以和when結(jié)合在一起昆淡,when的作用在文章的后半部分有說到
fun main(args: Array<String>) {
    println(result("Red"));
}
//獲取返回值
 fun result(color: String): Int = when (color) {
  "Red" -> 0
  "Green" -> 1
  "Blue" -> 2
  else -> throw IllegalArgumentException("Invalid color param value")
}

in關(guān)鍵字的使用

可以看到kotlin的if else,條件判斷語句或者是使用for循環(huán)語句其實和Java都沒有什么區(qū)別

if語句判斷示例
//使用 in
fun main(args: Array<String>) {
    var x: Int =1;//如果x的值為0,則輸出not
    var y: Int =3;
   //如果存在于區(qū)間(1,y-1)刽严,則打印yes
    if (x in 1..y-1) {
        print("yes");
    }else {
         print("not");
    }
}
//使用 !in
fun main(args: Array<String>) {
    var x: Int =0;//如果x的值為1昂灵,則輸出not
    var y: Int =3;
   //如果x不存在與區(qū)間(1,y-1),則打印yes
    if (x !in 1..y-1) {
        print("yes");
    }else {
         print("not");
    }
}

//你也可以這樣子寫if語句,但是它打印的內(nèi)容卻是這樣子的“kotlin.Unit”
fun foo(param: Int) {
  val result = if (param == 1) {
    "one"
  } else if (param == 2) {
    "two"
  } else {
    "three"
  }
}
for循環(huán)語句使用示例
fun main(args: Array<String>) {
    var v: Int;
    for(x in 1..5){
        println(x);
    }
}

//遍歷集合(類似于Java中的for(String name : names))
fun main(args: Array<String>) {
    val lists = listOf("a", "b", "c")
    for(list in lists){
        println(list);
    }
}

直接使用in在lists里面判斷是否存在某個對象舞萄,這個就和我們Java里面的List的contains作用一樣

fun main(args: Array<String>) {
    var a: String = "a";
    val lists = listOf("a", "b", "c")
    //如果lists集合中包含a對象則打印yes
    if (a in lists){
       print("yes");
    }
}

when 語句

Kotlin用when眨补、->及else組合來替代原先的switch、case及default

fun test(value: Int){
    when(value){
         10 -> println("數(shù)字10");
         20 -> println("數(shù)字20");
         30 -> println("數(shù)字30");
        else ->{
            println("未知數(shù)");
        }
    }
}

智能類型推測 -- is and !is

判斷一個對象是否為一個類的實例倒脓,我們可以使用is關(guān)鍵字
這個與Java中的instanceof關(guān)鍵字類似渤涌,但在Kotlin中如果已經(jīng)確定了一個對象的類型,可以在接下來的代碼塊中直接作為這個確定類型使用把还。

fun getStringLength(obj: Any): Int? {
  if (obj is String) {
    // 做過類型判斷以后实蓬,obj會被系統(tǒng)自動轉(zhuǎn)換為String類型
    return obj.length;
  }

  //同時還可以使用!is,來取反
  if (obj !is String){
  }

  // 代碼塊外部的obj仍然是Any類型的引用
  return null;
}

異常處理 try/catch 表達式

kotlin的異常處理和Java的異常處理并沒有什么不同

fun testTryCatch() {
  val result = try {
    test();
  } catch (e: ArithmeticException) {
    throw IllegalStateException(e);
  }
  //  對result做處理 
}

好了吊履,本文內(nèi)容到此結(jié)束安皱,歡迎大家丟磚一起學習,一起進步艇炎,謝謝大家酌伊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子居砖,更是在濱河造成了極大的恐慌虹脯,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件奏候,死亡現(xiàn)場離奇詭異循集,居然都是意外死亡,警方通過查閱死者的電腦和手機蔗草,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門咒彤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人咒精,你說我怎么就攤上這事镶柱。” “怎么了模叙?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵歇拆,是天一觀的道長。 經(jīng)常有香客問我范咨,道長查吊,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任湖蜕,我火速辦了婚禮逻卖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘昭抒。我一直安慰自己评也,他們只是感情好,可當我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布灭返。 她就那樣靜靜地躺著盗迟,像睡著了一般。 火紅的嫁衣襯著肌膚如雪熙含。 梳的紋絲不亂的頭發(fā)上罚缕,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天,我揣著相機與錄音怎静,去河邊找鬼邮弹。 笑死,一個胖子當著我的面吹牛蚓聘,可吹牛的內(nèi)容都是我干的垄提。 我是一名探鬼主播堵漱,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼序调,長吁一口氣:“原來是場噩夢啊……” “哼堰怨!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤急迂,失蹤者是張志新(化名)和其女友劉穎影所,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚碎,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡猴娩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了听盖。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡裂七,死狀恐怖皆看,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情背零,我是刑警寧澤腰吟,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站徙瓶,受9級特大地震影響毛雇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜侦镇,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一灵疮、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧壳繁,春花似錦震捣、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至渣触,卻和暖如春羡棵,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背嗅钻。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工皂冰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人养篓。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓灼擂,卻偏偏與公主長得像,于是被迫代替她去往敵國和親觉至。 傳聞我的和親對象是個殘疾皇子剔应,可洞房花燭夜當晚...
    茶點故事閱讀 44,700評論 2 354

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