Kotlin教程 Null安全 条件语句 匿名函数

一.Null安全

在Java语言中,我们可以声明一个 引用类型变量 而不明确提供初始值。在这类情况下,系统会给这个变量初始化一个默认值。比如一个String类型的变量,默认值是null。

比如

private String mName;

因为全局变量mName是String类型的变量,且没有赋值。所以系统赋值一个默认值null

但是,默认情况下Kotlin变量不能持有null值

比如 Kotlin中 如下代码无效

val languageName: String = null

要使变量持有null值,它必须是可为null类型。可以在变量类型后面加上 ? 后缀,将变量指定为可为 null。如下

val languageName: String? = null

指定 String? 类型后,可以为 languageName 赋予 String 值或 null。

二.条件语句

Kotlin 提供了几种实现条件逻辑的机制,其中最常见的是 if-else 语句。如下

代码

class KotlinActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin)

        val result1 = generateAnswerString(10);
        Log.d("KotlinActivity", "result1:$result1")

        val result2 = generateAnswerString(20);
        Log.d("KotlinActivity", "result2:$result2")
    }

    /**
     * 自定义String返回值类型 且接收参数 方法
     * */

    private fun generateAnswerString(num: Int): String {
        if (num <= 10) {
            return "I have the answer."
        } else {
            return "The answer eludes me."
        }
    }

}

结果

D/KotlinActivity: result1:I have the answer.


D/KotlinActivity: result2:The answer eludes me.

说明

if (num <= 10) {
    return "I have the answer."
} else {
    return "The answer eludes me."
}

这个if-else本身没什么要讲的,是最基本的条件语句。但是区别于Java。Kotlin中对于这个条件语句有不同的写法。

具体有哪些不同呢?我们下面分析

1.可以省略每一个分支的return,而是把return关键字放到if前面即整个条件语句的前面。如下

return if (num <= 10) {
    "I have the answer."
} else {
    "The answer eludes me."
}

2.也可以不使用return,因为每个分支都是返回的String类型。所以在Kotlin中我们可以定义一个变量接收每个分支的结果

val answerString: String = if (num <= 10) {
    "I have the answer."
} else {
    "The answer eludes me."
}

return answerString

注意

<1> AndroidStudio更推荐我们使用第一种写法

<2> Kotlin不包含传统的三元运算符,而是倾向于使用条件表达式

3. when 表达式

随着条件语句复杂性不断增加if-else分支变多,AndroidStudio会推荐我们可以考虑将 if-else 表达式替换为 when表达式。比如

return when {
    num == 10 -> "I have the answer."
    num >= 20 -> "The answer is close."
    else -> "The answer eludes me."
}

when表达式中 每个分支都由 一个条件一个箭头 (->)一个结果来表示。

如果箭头左侧的条件为 true,则会返回右侧的表达式结果。

请注意,执行并不是从一个分支跳转到下一个分支。

三.匿名函数

Kotlin中并非每个函数都需要一个名称。比如

private fun method(num: Int): String {
    return "张三$num"
}



private:函数私有

fun:Kotlin语音函数关键字

method:函数名

num:函数入参

String:函数返回类型

某些函数通过 输入输出 更直接地进行标识。这些函数称为“匿名函数”。您可以保留对某个匿名函数的引用,以便日后使用此引用来调用该匿名函数。比如

class KotlinActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_kotlin)

        val stringLength: Int = stringLengthFunc("Android")
        Log.d("KotlinActivity", "stringLength:$stringLength")

        val number: String = intNumber(123456)
        Log.d("KotlinActivity", "number:$number")
    }

    /**
     * 匿名函数
     *stringLengthFunc变量 包含对一个匿名函数的引用
     * 输入值:String类型
     * 输出值:Int类型
     * */

    val stringLengthFunc: (String) -> Int = { result ->
        result.length
    }

    /**
     * 匿名函数
     *intNumber变量 包含对一个匿名函数的引用
     * 输入值:Int类型
     * 输出值:String类型
     * */

    val intNumber: (Int) -> String = { result ->
        result.toString()
    }

}

结果

D/KotlinActivity: stringLength:7

D/KotlinActivity: number:123456

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值