kotlin不容忽视的小细节

简介: kotlin不容忽视的小细节

kotlin支持扩展函数

Kotlin的扩展函数可以让你作为一个类成员进行调用的函数,但是是定义在这个类的外部。这样可以很方便的扩展一个已经存在的类,为它添加额外的方法。

rxjava线程切换:

fun <T> Observable<T>.setThread(): Observable<T> {
    return subscribeOn(Schedulers.io())
         .observeOn(AndroidSchedulers.mainThread())
}

findViewById:

fun <V : View> Activity.bindView(id: Int): Lazy<V> {
    return lazy { findViewById<V>(id) }
}

更加通用的自定义表达式:

    fun <T> T.checkExpression(expression: Boolean, function: T.() -> T): T {
        if (expression) {
            function.invoke(this)
        }
        return this
    }

    还可以定义些通用函数

      /**
       * int px转dp
       */
      fun Int.toDp(): Int{
          val scale = App.context.resources.displayMetrics.density
          return (this * scale + 0.5f).toInt()
      }
      /**
       * float px转dp
       */
      fun Float.toDp(): Float{
          val scale = App.context.resources.displayMetrics.density
          return this * scale + 0.5f
      }
      /**
       * List<T>转Map<K,T>,获取对数据
       */
      inline fun <K,T> Iterable<T>.toMap(transform: (T) -> K): MutableMap<K, T>{
          val map = mutableMapOf<K, T>()
          forEach {
              map[transform.invoke(it)] = it
          }
          return map
      }
      /**
       * List<T>转List<R>
       */
      inline fun <T, R> Iterable<T>.convert(transform: (T) -> R): Iterable<R>{
          val list = mutableListOf<R>()
          forEach {
              list.add(transform.invoke(it))
          }
          return list
      }

      协程

      类似于线程,但是占用内存更低且更高效,同时在协程中执行代码,是顺序执行,而java 线程需要通过回调。

            // do first: main
            // do async: DefaultDispatcher-worker-5
            // do end: main
            GlobalScope.launch(Dispatchers.Main) {
                println("do first: ${Thread.currentThread().name}")
                GlobalScope.async(Dispatchers.Default) {
                    println("do async: ${Thread.currentThread().name}")
                }.await()
                println("do end: ${Thread.currentThread().name}")
            }

        kotlin的lambda表达式规则

        不用lambda表达式:

          // 这里举例一个Android中最常见的按钮点击事件的例子
          mBtn.setOnClickListener(object : View.OnClickListener{
                  override fun onClick(v: View?) {
                      Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show()
                  }
              })

          等价于:

            // 调用
            mBtn.setOnClickListener { v -> Toast.makeText(this,"onClick",Toast.LENGTH_SHORT).show() }

            特性如下:

            • 表达式总是被大括号括着
            • 其参数(如果存在)在 -> 之前声明(参数类型可以省略)
            • 函数体(如果存在)在 -> 后面

            相比java8的lambda表达式,还有其他特性:

            当方法中最后一个参数为函数类型,则可以放在大括号调用

              fun lambdaFun(boolean: Boolean, block: (Int) -> Unit){
              }
              fun lambdaFunTest(){
                  lambdaFun(true, block = {
                  })
                  lambdaFun(true){
                  }
              }

              it

              it是在当一个高阶函数中Lambda表达式的参数只有一个的时候可以使用it来使用此参数。it可表示为单个参数的隐式名称,是Kotlin语言约定的。

                val arr = arrayOf(1,3,5,7,9)
                // 过滤掉数组中元素小于2的元素,取其第一个打印。这里的it就表示每一个元素。
                println(arr.filter { it < 5 })
                相关文章
                |
                2月前
                |
                Java 调度 Android开发
                构建高效Android应用:探究Kotlin多线程编程
                【2月更文挑战第17天】 在现代移动开发领域,性能优化一直是开发者关注的焦点。特别是在Android平台上,合理利用多线程技术可以显著提升应用程序的响应性和用户体验。本文将深入探讨使用Kotlin进行Android多线程编程的策略与实践,旨在为开发者提供系统化的解决方案和性能提升技巧。我们将从基础概念入手,逐步介绍高级特性,并通过实际案例分析如何有效利用Kotlin协程、线程池以及异步任务处理机制来构建一个更加高效的Android应用。
                |
                3天前
                |
                移动开发 调度 Android开发
                构建高效Android应用:探究Kotlin协程的优势与实践
                【4月更文挑战第28天】 在移动开发领域,尤其是针对Android平台,性能优化和异步处理一直是开发者关注的焦点。随着Kotlin语言的普及,其提供的协程功能已经成为处理异步任务的强大工具。本文将深入探讨Kotlin协程在Android应用开发中的优势,并通过实例展示如何利用协程提升应用性能和响应能力。我们将分析协程与传统线程和AsyncTask的对比,以及如何在实际项目中有效集成和调试协程。
                |
                2天前
                |
                数据处理 调度 Android开发
                构建高效Android应用:探究Kotlin的协程优势
                【4月更文挑战第28天】 随着移动应用开发日趋复杂,传统的线程和异步处理模型在处理并发任务时显得笨重且易出错。本文深入分析了Kotlin协程作为一种轻量级线程管理方案的优势,探讨了其在Android应用中实现流畅用户界面和提升性能的潜力。通过对协程原理的剖析以及与现有技术的比较,揭示了如何利用协程优化应用结构、简化代码逻辑,并提高应用的响应性和可维护性。
                |
                9天前
                |
                Java 数据库 Android开发
                构建高效Android应用:探究Kotlin协程的优化实践
                【4月更文挑战第22天】 随着移动开发技术的不断进步,Android平台上的性能优化已成为开发者们关注的焦点。在众多优化手段中,Kotlin协程以其轻量级线程管理和异步编程的优势,为提高应用性能和响应性提供了新的思路。本文将深入探讨Kotlin协程在Android开发中的具体应用,通过实例演示如何利用协程进行网络请求、数据库操作和UI线程的非阻塞更新,以期达到提升应用性能的目的。
                12 2
                |
                14天前
                |
                API 调度 Android开发
                构建高效Android应用:探究Kotlin协程的实践之路
                【4月更文挑战第17天】 随着移动开发技术的不断演进,Android平台的性能优化已成为开发者关注的焦点。Kotlin协程作为一种新型的轻量级线程管理方案,在简化异步编程和提升应用响应性方面展现出巨大潜力。本文将深入探讨Kotlin协程在Android开发中的应用实践,从基本概念到实际案例,为开发者提供一条清晰、高效的学习路径,旨在帮助读者掌握协程技术,优化应用性能,提升用户体验。
                11 0
                |
                2月前
                |
                移动开发 调度 Android开发
                构建高效Android应用:探究Kotlin协程的最佳实践
                在移动开发领域,性能优化和资源管理是至关重要的。特别是对于Android开发者来说,合理利用Kotlin协程可以大幅提升应用的响应性和用户体验。本文将深入探讨Kotlin协程的核心概念、优势以及它们在Android项目中的实际应用。我们还将通过代码示例来揭示如何有效地使用协程进行后台任务处理,避免阻塞UI线程,并确保内存的有效管理。文章的目标是为读者提供一套实用的指南,帮助他们在Android开发中充分利用Kotlin协程的强大功能。
                15 1
                |
                2月前
                |
                移动开发 Android开发 开发者
                构建高效Android应用:探究Kotlin协程的优势
                在移动开发领域,尤其是针对Android平台,性能优化和流畅的用户体验始终是开发者追求的核心目标。近年来,Kotlin语言凭借其简洁性和功能性成为Android开发的新宠,特别是Kotlin协程的引入,为编写异步代码提供了一种全新的范式。本文将深入探讨Kotlin协程在Android应用开发中的应用及其带来的优势,旨在帮助开发者理解并运用协程来提高应用的性能和响应性。
                |
                4月前
                |
                存储 设计模式 Java
                聊聊 Kotlin 代理的“缺陷”与应对
                聊聊 Kotlin 代理的“缺陷”与应对
                37 0
                |
                安全 Java Android开发
                重学Kotlin之那些你没注意到的细节
                Kotlin中的一些关键字
                121 0
                |
                Java Kotlin
                【Kotlin 初学者】打牢基础的重要性
                为什么要打牢基础,再实战? Kotlin 反编译 Java 控件 Kotlin Java 变量 Kotlin Java 关联控件和点击事件 Kotlin Java 函数 Kotlin Java
                197 0
                【Kotlin 初学者】打牢基础的重要性