Kotlin——从无到有系列之高级篇(一):Lambda表达式 (3)

例:这里用官方的一个例子做说明

class HTML { fun body() { …… } } fun html(init: HTML.() -> Unit): HTML { val html = HTML() // 创建接收者对象 html.init() // 将该接收者对象传给该 lambda return html } html { // 带接收者的 lambda 由此开始 body() // 调用该接收者对象的一个方法 } 3.5 闭包

所谓闭包,即是函数中包含函数,这里的函数我们可以包含(Lambda表达式,匿名函数,局部函数,对象表达式)。我们熟知,函数式编程是现在和未来良好的一种编程趋势。故而Kotlin也有这一个特性。

我们熟知,Java是不支持闭包的,Java是一种面向对象的编程语言,在Java中,对象是他的一等公民。函数和变量是二等公民。

Kotlin中支持闭包,函数和变量是它的一等公民,而对象则是它的二等公民了。

实例:看一段Java代码

public class TestJava{ private void test(){ private void test(){ // 错误,因为Java中不支持函数包含函数 } } private void test1(){} // 正确,Java中的函数只能包含在对象中+ }

实例:看一段Kotlin代码

fun test1(){ fun test2(){ // 正确,因为Kotlin中可以函数嵌套函数 } }

下面我们讲解Kotlin中几种闭包的表现形式。

3.5.1、携带状态

例:让函数返回一个函数,并携带状态值

fun test(b : Int): () -> Int{ var a = 3 return fun() : Int{ a++ return a + b } } val t = test(3) println(t()) println(t()) println(t())

输出结果:

7 8 9 3.5.2、引用外部变量,并改变外部变量的值

例:

var sum : Int = 0 val arr = arrayOf(1,3,5,7,9) arr.filter { it < 7 }.forEach { sum += it } println(sum)

输出结果:

9 3.6 在Android开发中为RecyclerView的适配器编写一个Item点击事件 class TestAdapter(val context : Context , val data: MutableList<String>) : RecyclerView.Adapter<TestAdapter.TestViewHolder>(){ private var mListener : ((Int , String) -> Unit)? = null override fun onBindViewHolder(holder: TestViewHolder?, position: Int) { ... holder?.itemView?.setOnClickListener { mListener?.invoke(position, data[position]) } } override fun onCreateViewHolder(parent: ViewGroup?, viewType: Int): TestViewHolder { return TestViewHolder(View.inflate(context,layoutId,parent)) } override fun getItemCount(): Int { return data.size } fun setOnItemClickListener(mListener : (position : Int, item : String) -> Unit){ this.mListener = mListener } inner class TestViewHolder(itemView : View) : RecyclerView.ViewHolder(itemView) } // 调用 TestAdapter(this,dataList).setOnItemClickListener { position, item -> Toast.makeText(this,"$position \t $item",Toast.LENGTH_SHORT).show() } 总结

Lambda表达式是为我们减少了大量的代码,但是Lambda表达式是为后面的高阶函数章节打下基础,虽然在这篇文章中也提到了高阶函数,但是都是最基础的,在下一节中会为大家介绍自定义高阶函数与Kotlin自身中常用的高阶函数讲解。

在这一章节中,讲述了Lambda的语法、使用。以及Lambda表达式的一些特性与实践操作。当然还包含了匿名函数这一知识点。其中最重要的当属Lambda的实践操作。如果你看完这篇文章还不甚理解,请在仔细的阅读一遍并实际代码演练,因为在后面的高阶函数章节还会遇到。

在这最后希望您能给个关注,因为您的关注,是我继续写文章最好的动力。

我的个人博客:Jetictors
Github:Jteictors
我的掘金:Jetictors

欢迎各位大佬进群共同研究、探索
QQ群号:497071402

Kotlin——从无到有系列之高级篇(一):Lambda表达式

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpxgjg.html