Kotlin那些实用的语法糖

使用with、apply、run简化代码,增强可读性

         //原始
        task_viewpager.setScrollMode(UltraViewPager.ScrollMode.HORIZONTAL)
        task_viewpager.adapter = SentenceAdapter(taskList)
        task_viewpager.currentItem = index

        //apply
        task_viewpager.apply {
            setScrollMode(UltraViewPager.ScrollMode.HORIZONTAL)
            adapter = SentenceAdapter(taskList)
            currentItem = index
        }

        //with
        with(task_viewpager){
            setScrollMode(UltraViewPager.ScrollMode.HORIZONTAL)
            adapter = SentenceAdapter(taskList)
            currentItem = index
        }

        //run
        index = task_viewpager.run {
            setScrollMode(UltraViewPager.ScrollMode.HORIZONTAL)
            adapter = SentenceAdapter(taskList)
            currentItem
        }

        

相比较而言使用apply更符合链式编程的习惯
run函数具有表达式的,它返回最后一行的值

其他函数

  • use
    用在 Java 上的 try-with-resources 表达式上
val input = Files.newInputStream(Paths.get("input.txt"))
val byte = input.use({ input.read() })
  • repeat
    它接受函数和整数作为参数,函数会被调用 n 次,这个函数避免写循环。
repeat(10, { println("Hello") })
  • require/assert/check
    检测条件是否为true, 否则抛出异常。 其中 require 用在参数检查; 而 assert/check 用在内部状态检查,assert 抛出 AssertionException 、 check 抛出 IllegalStateException。
require(true,{"error message"})

空指针处理,避免长串!!出现

  • 对于一个不可为空类型:如果直接给不可为空类型赋值一个可能为空的对象就在编译阶段就不能通过

  • 对于一个可空类型:通过?声明,在访问该类型的时候直接访问不能编译通过,需要通过?.或者!!.

  • 尽量多使用let 和 ?:代替!!

val user = User()
    user!!.name!!.subSequence(0,5)!!.length

val user: User? = User()

    //每次访问都用用?.判断
    user?.name
    user?.age
    user?.toString()

//提前判断非空
if (user != null) {
        user.name
        user.age
        user.toString()
    }
//let语句
user?.let {
        it.name
        it.age
        it.toString()
    }

扩展函数

fun Activity.toast(msg:String, duration:Int = Toast.LENGTH_SHORT){
    Toast.makeText(this,msg,duration)
}

fun Fragment.toast(msg:String, duration:Int = Toast.LENGTH_SHORT){
    Toast.makeText(activity,msg,duration)
}

toast("123")

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容