Day04空類(lèi)型债蓝,空安全以及函數(shù)的基本使用

1壳鹤、空類(lèi)型盛龄、空安全
2饰迹、函數(shù)的基本使用

空類(lèi)型、空安全

1余舶、定義可為空的變量
修飾符 變量名 : 類(lèi)型? = 值

    var a: String? = "abcde"
    println("$a")
    a = null
    println("$a")

2啊鸭、判斷空的方式
  1 if...else...
  2 ?. 當(dāng)a為空時(shí),則不執(zhí)行?后面的代碼,否則執(zhí)行

  //1)if..else..
    if (a == null) {
        println("a為空")
    } else {
        println("a不為空")
    }
    //2) ?.   當(dāng)a為空時(shí),則不執(zhí)行?后面的代碼,否則執(zhí)行
    println(a?.length)

3、函數(shù)中使用空的情況

fun sumNum(): Int? {
    var b: String? = "123465"
    return b?.length
}

4匿值、let操作符
  1. let操作符的作用:當(dāng)時(shí)用符號(hào)?.驗(yàn)證的時(shí)候,為null是不執(zhí)行l(wèi)et里面的內(nèi)容
  2. let的用法:變量?.let{ ... }

  val arrTest: Array<Int?> = arrayOf(1, 2, null, 3, null)
    // 一般寫(xiě)法
    for (index in arrTest) {
        if (index == null) {
            continue
        }
        println("index = $index")
    }
    // let寫(xiě)法
    for (index in arrTest) {
        index?.let { println("index = $it") }
    }

5赠制、Evils操作符(安全操作符)
  1. ?: 這個(gè)操作符表示在判斷一個(gè)可空類(lèi)型時(shí),會(huì)返回一個(gè)我們自己設(shè)定好的默認(rèn)值.
  2. !! 這個(gè)操作符表示在判斷一個(gè)可空類(lèi)型時(shí),會(huì)顯示的拋出空引用異常(NullPointException).盡量不要使用,除非保證一定不為空
   3. as? 這個(gè)操作符表示為安全的類(lèi)型轉(zhuǎn)換.
  4. as操作符钟些,表示類(lèi)型轉(zhuǎn)換烟号,如果不能正常轉(zhuǎn)換的情況下使用as?操作符。當(dāng)使用as操作符的使用不能正常的轉(zhuǎn)換的情況下會(huì)拋出類(lèi)型轉(zhuǎn)換(ClassCastException)異常政恍,而使用as?操作符則會(huì)返回null,但是不會(huì)拋出異常

  //   ?:
    var testStr: String? = null
    var length = 0
    // 一般寫(xiě)法
    length = if (testStr != null) testStr.length else -1

    // ?: 寫(xiě)法
    length = testStr?.length ?: -1
    println(length)

    //  !!
    testStr = null
  //   println(testStr!!.length)//如果為空,會(huì)報(bào)空指針異常.只有在保證一定不為空的時(shí)候可以使用

    //  as?
  // 會(huì)拋出ClassCastException異常
//   val num1 : Int? = "Koltin" as Int
//    println("nun1 = $num1")

    val num2 : Int? = "Koltin" as? Int
    println("nun2 = $num2")

函數(shù)的基本使用

1 汪拥、函數(shù)的聲明
  1. 關(guān)鍵字:fun
  2. 格式:可見(jiàn)性修飾符 fun 函數(shù)名(參數(shù)名 :類(lèi)型,...) : 返回值{}
  3. Kotlin中默認(rèn)為public可見(jiàn)性修飾符
  4. ()  {} 必須存在

fun test(){ 
}
//相當(dāng)于java中
public void test(){
}

2、成員函數(shù)
成員函數(shù)是指在類(lèi)或?qū)ο笾械膬?nèi)部函數(shù)篙耗。

class Demo {
    fun test(){
    }
}

3迫筑、函數(shù)的使用
普通的使用
成員函數(shù)的使用

// 普通的使用
test()
// 如果函數(shù)有返回值
val x = basis()
// 成員函數(shù)的使用:先初始化對(duì)象,在根據(jù)對(duì)象使用`中綴符號(hào)(.)`調(diào)用其成員函數(shù)
Demo().test()
// 如果函數(shù)有返回值
val x = Demo().test()

4宗弯、函數(shù)的返回值
  1. Unit類(lèi)型(函數(shù)無(wú)返回值,默認(rèn),可以忽略不寫(xiě))
  2. 其他顯示返回類(lèi)型的返回值

fun unitFun() : Unit{
    println("我是返回值為Unit的函數(shù)脯燃,Unit可省略")
    return
    // return Unit 可省略
    // 或者 return  可省略
}
等價(jià)于
 fun unitFun(){
    println("我是返回值為Unit的函數(shù),Unit可省略")
}

fun num() : Int{
    return 2
}

5蒙保、函數(shù)的參數(shù)
  1. 具有參數(shù)的基本函數(shù)聲明
    格式:name : type

fun funArgs(numA: Int, numB: Float) {
    println("numA = $numA \t numB = $numB")
}

2. 默認(rèn)參數(shù)辕棚,即參數(shù)具有默認(rèn)值
    當(dāng)具有默認(rèn)參數(shù)時(shí),可以對(duì)是參數(shù)有默認(rèn)值的參數(shù)不傳遞參數(shù)值追他。

fun defArgs(numA: Int = 1, numB: Float = 2f) {
    println("numA  =  $numA \t numB = $numB ")
}

3. 命名參數(shù)坟募,當(dāng)傳遞參數(shù)的時(shí)候顯示使用 參數(shù)名 = 參數(shù)值
    即在使用函數(shù)時(shí)顯示使用參數(shù)名 = 參數(shù)值這種方式傳遞參數(shù)

//命名參數(shù)
fun callFun(str: String, isTrue: Boolean = false, numA: Int = 2) {
    println("$str \t $isTrue \t $numA")
}

4. 可變數(shù)量的參數(shù):即參數(shù)的個(gè)數(shù)不定。
    1. 當(dāng)一個(gè)函數(shù)中的參數(shù)是不定數(shù)量的個(gè)數(shù)并且是同一個(gè)類(lèi)型邑狸,則可是使用vararg修飾符去修飾這個(gè)變量懈糯,則被vararg修飾的參數(shù)相當(dāng)于一個(gè)固定類(lèi)型的數(shù)組。
    2.聲明格式:fun 函數(shù)名(vararg 參數(shù)名 : 類(lèi)型单雾,...) :返回值{}

//可變數(shù)量的參數(shù)
fun varargFun(a:Int,vararg str:String){
    str.forEach {
        print("$it \t")
    }
fun main(args: Array<String>) {
    //無(wú)參
    test()
    //有參
    funArgs(100, 1f)
    // 默認(rèn)參數(shù)的函數(shù)使用
    defArgs()
    defArgs(1, 10f)
    //命名參數(shù)
    //str不具備有默認(rèn)值,所以必須傳值,其他可以不用傳
    callFun("aaaaa")
    callFun("str",true,2)//----和java一樣了-----
    callFun("str",isTrue = true,numA = 3)//使代碼更具有可讀性
    callFun("cccc",numA = 10000)//不需要所有的參數(shù)時(shí)
    //可變參數(shù)
    varargFun(100,"aa","bb","cc")
 }
}

6赚哗、單表達(dá)式函數(shù)
  即函數(shù)具備返回值的時(shí)候,可以省略花括號(hào)并且在=賦值符號(hào)之后指定代碼體硅堆,而函數(shù)的返回值是有編輯器自動(dòng)推斷的屿储。注意:只有一行代碼體的時(shí)候,可以使用該函數(shù).

fun main(args: Array<String>) {
    println(test1())
    println(test2(2))
    println(test3(2f))

}

// 無(wú)參數(shù)的情況
fun test1() = 2                     // 自動(dòng)推斷為:返回類(lèi)型為Int

// 有參數(shù)的情況
fun test2(num: Int) = num * 2      // 自動(dòng)推斷為:返回類(lèi)型為Int

// 或者
fun test3(x: Float, y: Int = 2) = x * y  // 和默認(rèn)參數(shù)一起使用,返回值為Float型

----------------------------THE END-------------------------

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末渐逃,一起剝皮案震驚了整個(gè)濱河市够掠,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌茄菊,老刑警劉巖疯潭,帶你破解...
    沈念sama閱讀 219,589評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異面殖,居然都是意外死亡竖哩,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評(píng)論 3 396
  • 文/潘曉璐 我一進(jìn)店門(mén)脊僚,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)相叁,“玉大人,你說(shuō)我怎么就攤上這事≡鲅停” “怎么了椿访?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,933評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)虑润。 經(jīng)常有香客問(wèn)我赎离,道長(zhǎng),這世上最難降的妖魔是什么端辱? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,976評(píng)論 1 295
  • 正文 為了忘掉前任梁剔,我火速辦了婚禮,結(jié)果婚禮上舞蔽,老公的妹妹穿的比我還像新娘荣病。我一直安慰自己,他們只是感情好渗柿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,999評(píng)論 6 393
  • 文/花漫 我一把揭開(kāi)白布个盆。 她就那樣靜靜地躺著,像睡著了一般朵栖。 火紅的嫁衣襯著肌膚如雪颊亮。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,775評(píng)論 1 307
  • 那天陨溅,我揣著相機(jī)與錄音终惑,去河邊找鬼。 笑死门扇,一個(gè)胖子當(dāng)著我的面吹牛雹有,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播臼寄,決...
    沈念sama閱讀 40,474評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼霸奕,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了吉拳?” 一聲冷哼從身側(cè)響起质帅,我...
    開(kāi)封第一講書(shū)人閱讀 39,359評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎留攒,沒(méi)想到半個(gè)月后煤惩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,854評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡稼跳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,007評(píng)論 3 338
  • 正文 我和宋清朗相戀三年盟庞,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了吃沪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片汤善。...
    茶點(diǎn)故事閱讀 40,146評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出红淡,到底是詐尸還是另有隱情不狮,我是刑警寧澤,帶...
    沈念sama閱讀 35,826評(píng)論 5 346
  • 正文 年R本政府宣布在旱,位于F島的核電站摇零,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏桶蝎。R本人自食惡果不足惜驻仅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,484評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望登渣。 院中可真熱鬧噪服,春花似錦、人聲如沸胜茧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,029評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)呻顽。三九已至雹顺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間廊遍,已是汗流浹背嬉愧。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,153評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留喉前,地道東北人英染。 一個(gè)月前我還...
    沈念sama閱讀 48,420評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像被饿,于是被迫代替她去往敵國(guó)和親四康。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,107評(píng)論 2 356

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