Kotlin教程 常见语法糖

一.语法 in&until&downTo&step

代码
class KotlinActivity : AppCompatActivity() {

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

        syntacticSugarFunction()
    }

    /**
     * 语法糖函数
     * */
    private fun syntacticSugarFunction() {
        //in&!in语法
        val inB0 = (1 in 1..10)
        val inB1 = (5 in 1..10)
        val inB2 = (10 in 1..10)
        val inB3 = (20 in 1..10)
        val inB4 = (30 !in 1..10)
        Log.d("KotlinActivity", "in&!in语法 1在[1,10]之间?$inB0")
        Log.d("KotlinActivity", "in&!in语法 5在[1,10]之间?$inB1")
        Log.d("KotlinActivity", "in&!in语法 10在[1,10]之间?$inB2")
        Log.d("KotlinActivity", "in&!in语法 20在[1,10]之间?$inB3")
        Log.d("KotlinActivity", "in&!in语法 30不在[1,10]之间?$inB4")

        //until语法
        for (i in 1 until 5) {
            Log.d("KotlinActivity", "until语法 [1,5)之间的数值:$i")
        }

        //downTo语法 不设置步长
        for (i in 5 downTo 1) {
            Log.d("KotlinActivity", "downTo语法 5到1输出:$i")
        }

        //downTo语法 设置步长
        for (i in 5 downTo 1 step 2) {
            Log.d("KotlinActivity", "downTo语法 步长2 5到1输出:$i")
        }

        for (i in 1..5 step 2) {
            Log.d("KotlinActivity", "in语法 步长2 [1,5]输出:$i")
        }

    }

}

结果

D/KotlinActivity: in&!in语法 1在[1,10]之间?true
D/KotlinActivity: in&!in语法 5在[1,10]之间?true
D/KotlinActivity: in&!in语法 10在[1,10]之间?true
D/KotlinActivity: in&!in语法 20在[1,10]之间?false
D/KotlinActivity: in&!in语法 30不在[1,10]之间?true


D/KotlinActivity: until语法 [1,5)之间的数值:1
D/KotlinActivity: until语法 [1,5)之间的数值:2
D/KotlinActivity: until语法 [1,5)之间的数值:3
D/KotlinActivity: until语法 [1,5)之间的数值:4


D/KotlinActivity: downTo语法 5到1输出:5
D/KotlinActivity: downTo语法 5到1输出:4
D/KotlinActivity: downTo语法 5到1输出:3
D/KotlinActivity: downTo语法 5到1输出:2
D/KotlinActivity: downTo语法 5到1输出:1


D/KotlinActivity: downTo语法 步长2 5到1输出:5
D/KotlinActivity: downTo语法 步长2 5到1输出:3
D/KotlinActivity: downTo语法 步长2 5到1输出:1


D/KotlinActivity: in语法 步长2 [1,5]输出:1
D/KotlinActivity: in语法 步长2 [1,5]输出:3
D/KotlinActivity: in语法 步长2 [1,5]输出:5

说明
1.in表示在...范围内,比如in 1..10 就是在1到10内,闭区间包括1和10。
2. !in表示不在...范围内,和in正好相反。
3.until表示半开区间,比如1 until 5 输出 1,2,3,4。
4.downTo 表示从...到...,比如 5 downTo 1 输出 5,4,3,2,1。
5.step设置步长,和in&downTo等一起使用。

二.语法equals&==

代码
class KotlinActivity : AppCompatActivity() {

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

        testFunction()
    }

    /**
     * 函数
     * */
    private fun testFunction() {
        val str01 = "字符串001"
        val str02 = "字符串001"
        val b1 = str01.equals(str02)
        val b2 = str01 == str02
        Log.d("KotlinActivity", "字符串类型 str01和str02 equals结果:$b1")
        Log.d("KotlinActivity", "字符串类型 str01和str02 ==结果:$b2")


        val int01 = 12
        val int02 = 12
        val b3 = int01 == int02
        Log.d("KotlinActivity", "数值类型 int01和int02 ==结果:$b3")

    }

}

结果
D/KotlinActivity: 字符串类型 str01和str02 equals结果:true

D/KotlinActivity: 字符串类型 str01和str02 ==结果:true

D/KotlinActivity: 数值类型 int01和int02 ==结果:true

说明
1.equals 是方法,引用数据类型存在此方法,一般用来比较值是否相等。
2.==是运算符,基本数据类型和引用数据类型都可使用,基本数据类型使用,比较的是两个数值大小是否相等,而引用数据类型使用,比较的是两个数据类型堆内存地址是否相等。

三.语法is&as

代码
class KotlinActivity : AppCompatActivity() {

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

        testFunction()
    }

    /**
     * 函数
     * */
    private fun testFunction() {
        val str = "字符串"
        val b1 = str is String
        Log.d("KotlinActivity", "str是否是字符串类型:$b1")

        val any: Any = "字符串"
        val str01: String = any as String
        Log.d("KotlinActivity", "Any类型强制转换成字符串类型:$str01")
    }

}

结果
D/KotlinActivity: str是否是字符串类型:true

D/KotlinActivity: Any类型强制转换成字符串类型:字符串

说明
1.is 用来判断一个对象与指定的类型是否一致。类似java中的instanceof关键字。is具有智能转换的作用,比如上述代码中,如果b1为true,str就会自动转换成字符串类型。

智能转换的好处:

<1> 提高类型安全性:智能转换消除了手动类型检查和转换的需要,减少了运行时类型错误的可能性。

<2> 更简洁的代码:它们通过删除冗余的类型检查和强制转换来简化代码并使其更加简洁和可读。

2.as是强制类型转换。

四.空安全

在Java中,NullPointerException异常十分常见,而Kotlin的优点则是可以尽可能避免执行代码时出现的空指针异常。比如Kotlin的空安全。

代码

class KotlinActivity : AppCompatActivity() {

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

        testFunction()
    }

    /**
     * 函数
     * */
    private fun testFunction() {
        val b1: String? = null
        val b2: String? = "str"
        val length1 = b1?.length
        val length2 = b2?.length
        Log.d("KotlinActivity", "字符串b1长度:$length1")
        Log.d("KotlinActivity", "字符串b2长度:$length2")
    }

}

结果

D/KotlinActivity: 字符串b1长度:null

D/KotlinActivity: 字符串b2长度:3

说明
1.b?.length 表示:若b不为null,才调用b.length。这就是Kotlin的空安全。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值