kotlin顶层函数和函数表达式怎么用

kotlin顶层函数和函数表达式怎么用

这篇文章将为大家详细讲解有关kotlin顶层函数和函数表达式怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

顶层函数

不同于Java中函数只能定义在每个类里面,Kotlin采用了JavaScript 中的做法,可以在文件任意位置处定义函数,这种函数称为顶层函数

kotlin顶层函数和函数表达式怎么用

编译后顶层函数会成为文件类下的静态函数,比如在文件名是join.kt下定义的joinToString函数可以通过JoinKt.joinToSting调用,其中JoinKt是编译后的类名。

//编译成静态函数//文件名join.ktpackagestringsfunjoinToString():String{...}/*Java*/importstrings.JoinKt;JoinKt.joinToSting(....)

看下上面函数编译后的效果:// 编译成class文件后反编译结果

//编译成class文件后反编译结果@NotNullpublicstaticfinalStringjoinToString(@NotNullCollectioncollection,@NotNullStringseparator,@NotNullStringprefix,@NotNullStringpostfix){Intrinsics.checkParameterIsNotNull(collection,"collection");Intrinsics.checkParameterIsNotNull(separator,"separator");Intrinsics.checkParameterIsNotNull(prefix,"prefix");Intrinsics.checkParameterIsNotNull(postfix,"postfix");StringBuildersb=newStringBuilder(prefix);intindex=0;for(Iteratorvar7=((Iterable)collection).iterator();var7.hasNext();++index){Objectelement=var7.next();if(index>0){sb.append(separator);}sb.append(element);}sb.append(postfix);Stringvar10000=sb.toString();Intrinsics.checkExpressionValueIsNotNull(var10000,"sb.toString()");returnvar10000;}//默认函数值publicstaticStringjoinToString$default(Collectionvar0,Stringvar1,Stringvar2,Stringvar3,intvar4,Objectvar5){if((var4&2)!=0){var1="";}if((var4&4)!=0){var2="[";}if((var4&8)!=0){var3="]";}returnjoinToString(var0,var1,var2,var3);

接下来看下Kotlin中很重要的一个特性,扩展函数。

扩展函数

  • 扩展函数是类的一个成员函数,不过定义在类的外面

  • 扩展函数不能访问私有的或者受保护的成员

  • 扩展函数也是编译成静态函数

表达式函数体

通过下面这个简单的例子看下函数声明相关的概念,函数声明的关键字是fun,嗯,比JS的function还简单。

Kotlin中参数类型是放在变量:后面,函数返回类型也是。

funmax(a:Int,b:Int):Int{if(a>b){returna}else{returnb}}

当然, Kotlin是有类型推导功能,如果可以根据函数表达式推导出类型,也可以不写返回类型。

但是上面的还是有点繁琐,还能再简单,在 Kotlin中if是表达式,也就是有返回值的,因此可以直接return,另外判断式中只有一行一句也可以省略掉大括号:

funmax(a:Int,b:Int){returnif(a>b)aelseb}

还能在简单点吗?可以,if是表达式,那么就可以通过表达式函数体返回:

funmax(a:Int,b:Int)=if(a>b)aelseb

最终只需要一行代码。

关于“kotlin顶层函数和函数表达式怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

发布于 2021-12-29 23:21:32
收藏
分享
海报
0 条评论
48
上一篇:Windows域环境存在远程代码执行风险预警是怎样的 下一篇:windows redis-cli 中文显示问题如何解决
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码