首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Kotlin关于内联函数一些理解分享

前言 看了很多博客,才明白了内联含义,其实最根本就是将写在别处代码拷贝到你现在执行方法,相当于一个方法执行,java方法执行是需要压栈出栈对吧,如果是两三个方法那就是两三次压栈出栈,...为了节省这个操作,提高一定效率,kotlin就出了这么个函数。...基于此,代码量不是很大情况下,我们是否有必要将所有的函数定义为内联?...通过上面的例子,我们对lambda表达式何时被内联做一下简单总结: 当lambda表达式以参数形式直接传递给内联函数,那么lambda表达式代码会被直接替换到最终生成代码。...是的,编译器会抛出“Illegal usage of inline-parameter”错误,这是因为Kotlin规定内联函数lambda参数只能被直接调用或者传递给另外一个内联函数,除此之外不能作为他用

49110

Kotlin函数

这里等待后面具体来看什么时候非内联 如果你只想被(作为参数)传给一个内联函数 lamda 表达式只有一些被内联,你可以用 noinline 修饰符标记一些函数参数: inline fun foo...这里等待后面具体来看什么时候非内联 Kotlin ,我们可以只使用一个正常、非限定 return 来退出一个命名或匿名函数。... Kotlin 中有一个约定,如果函数最后一个参数是一个函数,并且你传递一个 lambda 表达式作为相应参数,你可以圆括号之外指定它: lock (lock) { sharedResource.operation...在上面第 4 代码,less 作为一个函数使用:通过传入两个 T 类型参数来调用。 如上所写是就函数类型,或者可以有命名参数,如果你想文档化每个参数含义的话。...可以实现dsl风格代码全靠它 Kotlin 提供了使用指定 接收者对象 调用函数字面值功能。 可以调用该接收者对象上方法而无需任何额外限定符,可以任意调用接受者方法和属性。

2.3K40
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈Kotlin函数

但是上面的还是有点繁琐,还能再简单, Kotlinif是表达式,也就是有返回值,因此可以直接return,另外判断式只有一一句也可以省略掉大括号: fun max(a: Int, b: Int...4.顶层函数 不同于Java函数只能定义每个类里面,Kotlin采用了JavaScript 做法,可以文件任意位置处定义函数,这种函数称为顶层函数。...5.扩展函数 扩展函数是类一个成员函数,不过定义外面 扩展函数不能访问私有的或者受保护成员 扩展函数也是编译成静态函数 所以可以Java库基础上通过扩展函数进行封装,假装好像都是调用Kotlin...自己库一样,KotlinCollection就是这么干。...,其中一个重要措施就是减少重复代码Java可以抽取出独立函数,但这样有时候对整体结构并不太好,Kotlin提供了局部函数来解决这个问题。

2.5K20

Kotlin内联函数

Kotlin内联函数还是挺好玩 为什么需要内联函数? lambda 表达式会被正常地编译成匿名类。这表示每调用一次 lambda表达式,一个额外类就会被创建。...内联函数使用 inline 修饰符标记,内联函数 被使用时候编译器并不会生成函数调用代码,而是使用函数实现真实代码替换每一次函数调用 内联函数如何运作?...Int、Long、Double都继承自Number,但是,如果我们调用上面的函数时,传入了Array,这样是会报错!!...因为 kotlin调用函数时要求参数类名必须完全一致!! 对于上面的函数,如果我们想既可以接收 Array, 也可以接收Array, 那么就可以定义一个具体化类型参数内联函数....: 内联函数调用时候会在调用出把该函数代码直接复制一份,调用10次就会复制10次,而并非普通函数一样直接引用函数地址。

1.5K20

Kotlin开发一些Tips

官方文档有张表来说明它们之间区别: Kotlin开发一些Tips 总结一下有几点区别: 1、apply和also返回上下文对象。 2、let、run 和with返回lambda 结果。...run { text = "Kotlin" textSize = 14f } 相比较来说使用run显得比较简洁,但let优势在于可以将it重命名,提高代码可读性,也可以避免作用域函数嵌套时导致混淆上下文对象情况...总的来说,这几种函数有许多重叠部分,因此可以根据开发具体情况来使用。以上仅做参考。 Sequence 我们经常会使用到kotlin集合操作符,比如 map 和 filter 等。...list.map { it * 2 }.filter { it % 3 == 0 } 老规矩,看一下反编译后代码Kotlin开发一些Tips 就干了这么点事情,创建了两个集合...既然Kotlin没有这个机制已经是既成事实,那么我们使用中就需要考虑它带来影响。比如我们开发调用一些方法时,要注意看一下源码是否有指定异常抛出,然后做相应处理,避免不必要崩溃。

53120

Kotlin开发一些Tips

run { text = "Kotlin" textSize = 14f } 相比较来说使用run显得比较简洁,但let优势在于可以将it重命名,提高代码可读性,也可以避免作用域函数嵌套时导致混淆上下文对象情况...总的来说,这几种函数有许多重叠部分,因此可以根据开发具体情况来使用。以上仅做参考。 Sequence 我们经常会使用到kotlin集合操作符,比如 map 和 filter 等。...但是Kotlin并不支持这个机制,也就是说不会强制你去处理抛出异常。至于Checked Exception 好不好,争议也不少。这里就不讨论各自优缺点了。...既然Kotlin没有这个机制已经是既成事实,那么我们使用中就需要考虑它带来影响。比如我们开发调用一些方法时,要注意看一下源码是否有指定异常抛出,然后做相应处理,避免不必要崩溃。...jsonObject.getString("id") ... } java我们需要处理JSONException,kotlin因为没有Checked Exception,如果我们像上面这样直接使用

52520

WorkManager Kotlin 实践

目前为止 WorkManager 系列已经讨论过: Android Jetpack WorkManager | Android 中文教学视频 在这篇文章,我们将讨论: Kotlin 如何使用 WorkManager...KTX 版 WorkManager 提供了更简洁且惯用 Kotlin 扩展函数。...而在 Kotlin ,我们可以借助 workDataOf 辅助函数代码更简洁: inline fun workDataOf(vararg pairs: Pair): Data 复制代码 因此可以将前面的...在这里,我想重点介绍一下什么是 CoroutineWorker,并且涵盖一些细小但很重要区别,以及深入了解如何使用在 WorkManager v2.1 引入新测试特性,来测试您 CoroutineWorker...现在您可以非常容易对 Worker 类进行测试,并且 WorkManager Kotlin 整体使用体验也非常棒。

1.8K10

Kotlin高阶函数深入讲解

前言 Kotlin,高阶函数是指将一个函数作为另一个函数参数或者返回值。如果用f(x)、g(x)用来表示两个函数,那么高阶函数可以表示为f(g(x))。...Kotlin为开发者提供了丰富高阶函数,比如Standard.ktlet、with、apply等,_Collectioins.ktforEach等。...常用高阶函数 Kotlin提供了很多高阶函数,这里根据这些高阶函数所在文件位置,分别进行介绍,先来看一下常用高阶函数,这些高阶函数Standard.kt文件。...Java,有时会为了保持业务逻辑连贯性,对未实现逻辑添加TODO标识,这些标识不进行处理,也不会导致程序异常,但是Kotlin中使用TODO时,就需要针对这些标识进行处理,否则当代码逻辑运行到这些标识处时...区别是T.run()是作为泛型T一个扩展函数,所以传入lambda表达式可以使用this关键字来访问这个泛型T成员变量和成员方法。

1.1K20

kotlin Standard内联函数示例详解

let、with、run、apply、also、takeIf、takeUnless、repeat函数使用 kotlin Standard.kt文件,提供了一些内联函数,这些内联函数可以减少代码量,...使代码优美的同时,打打提高开发效率。...: T.() - R): R = receiver.block() with函数不是以扩展函数形式存在,它是将对象作为参数,函数块内通过this指代该对象。...with函数是接收了两个参数,分别为对象receiver和一个lambda函数块,返回值为函数最后一或指定return表达式。...结语: Kotlin Standard.kt标准库函数已基本讲解完毕,其中涉及到了高阶函数和lambda函数,相关知识可通过官方文档学习,同时建议读者将每个函数都实际敲一遍,并通过查看他们编译后

65310

Kotlinsam(函数式接口)详解

用lambda表达式去表示java匿名类实例 使用java去给一个按钮设置监听我们通常会通过创建匿名类实例,如下 Button.setOnClickListener(new OnClickListener...public void onClick(View v){ Toast.makeText(this,"Hello World",Toast.LENGTH_LONG).show() } } kotlin...OnClickListener接口只有一个抽象方法,这种接口kotlin中被当作函数式接口,或者SAM接口,SAM代表单抽象方法,类似的还有像Runnable和Callable这样函数式接口....SAM构造方法:显式地把lambda转换成函数式接口. 在有的方法需要返回一个函数式接口,不能返回一个lambda, 可以用SAM构造方法把它包装起来....另外除了返回值通过lambda创建函数式接口外,也可以把lambda生成函数式接口放在一个变量,如下 val listener = OnClickListener{ view - val text

1.6K40

赠书:KotlinSpring Boot应用

随着Kotlin移动端开发普及,它也逐步走入后端开发者视野。Kotlin是JVM体系语言,和Java有着良好互操作性,上手较容易,且可以使用Java强大生态,其还具有函数式编程优点。...市面上介绍使用Kotlin进行后端开发图书和文章也比较少,袁康大量实践基础上,萌生了写一本书想法,希望和更多Java开发人员分享Kotlin在后端开发实践经验。...本文选自书中“Kotlin常用中间件应用”一章,这一章主要介绍Kotlin常用中间件应用,通过示例程序,将展示Kotlin集成Spring Boot、Redis、JPA、QueryDSL、MongoDB...和用Java开发Spring Boot项目类似,Kotlinmain函数启动应用,用GetMapping定义一个get接口,使用@RestController后就不用为每个方法添加@ResponseBody...本书专注于KotlinSpring Boot微服务开发实践,介绍了函数式编程思想、Kotlin语法、Kotlin常用中间件应用,以及其微服务注册中心、微服务配置中心、微服务网关、Spring

1.5K30

Kotlin一些技巧与迂回操作分享

本文将给大家详细关于Kotlin技巧与迂回操作一些内容,下面话不多说了,来一起看看详细介绍吧 不需要 import 就能使用顶层函数 一个顶层函数,除非你同一个文件里使用,否则就需要 import...问题是有些人就是嫌烦,想要所谓“全局函数”,就像 Kotlin 标准库里 println 一样。...递归 Lambda 表达式 刚才某个 Kotlin 裙里看到有人在问: 是不是lambda无法递归 举个例子,我们可以写一个简单递归函数: fun a() { println("1551"...(读者可以思考一下为什么这里我给了 Kotlin-js 例子是而不是 Kotlin-jvm(逃 阻止编译器添加对非空类型函数参数 NullCheck 总所周知,当一个函数参数是非空类型时,Kotlin...编译器会在方法入口处加一检查入参是否为空代码

69210

Kotlin Vocabulary | 使用 Kotlin 扩展提升代码可读性

虽然这两种方式都可以解决问题,但终究还是很难写出简洁易读代码。 值得庆幸是,Kotlin 带着 扩展函数和属性 来 "拯救" 我们了。...正如我们稍后所看到,扩展会在其被定义文件反编译成静态方法,并接收一个我们要扩展实例作为参数。以下就是 Java 调用 printDogInformation() 扩展函数示例代码。...在这种情况下,会调用代码扩展函数,而您所得到唯一信息是您所定义扩展函数变成了一个未被使用方法。...工作原理 我们可以 Android Studio 对 printDogInformation() 反编译,方法是 Tools/Kotlin/Show Kotlin Bytecode 中点击 Decompile...这就是为什么代码没有 Backing Fields 原因——它们实际上并没有插入任何成员。 总结 总的来说,扩展是一个很有用工具。

1.3K10

移除Kotlin代码感叹号(!!)

空安全是Kotlin提供功能之一。它让你思考语言级别的可空性,所以你可以避免Java很常见NullPointerException。...但是,当你自动将Java代码转换为Kotlin时,你会看到很多!!符号。这意味着“你在这里有一个潜在未处理KotlinNullPointerException”。...① 使用val而不是var Kotlin让你在语言层面思考不可变性。val是只读,var是可变。建议你尽可能多使用只读属性。它们是线程安全,并且函数式编程很好用。...这在Android很常见。对于这种情况,我们使用Kotlin提供lateinit。 !!写法 private var mAdapter: RecyclerAdapter?...对于原始数据类型,我们可以这样使用委托: private var mNum:Int by Delegates.notNull () ③ 使用let函数 下面是Kotlin代码中常见错误

1.6K30

Kotlin协程及Android应用

提前说一下async和launch区别: async函数体中最后一代码表达式运行结果会作为结果返回,也就是Deferred泛型T,我们可以通过其他协程函数获取到这个执行结果,而launch没有这样返回值...IO 调度器启动一个协程,但它们之间有一些区别: GlobalScope.launch(Dispatchers.IO){} 是全局范围内启动一个协程,不受外部作用域限制。...协程调度器 Kotlin给我们提供了四种调度器 Default:默认调度器,CPU密集型任务调度器,通常处理一些单纯计算任务,或者执行时间较短任务。...最常见,网络请求IO线程,而页面更新主线程。 Kotlin给我们提供了一个顶层函数withContext用于改变协程上下文并执行一段代码。...Kotlin协程最大优势就是以同步方式写异步代码,这就是通过挂起函数用来实现。

10910

Python10代码可以执行哪些高端操作?

让我们看看在不超过10代码可以实现哪些有趣特性。 最主要还是要练习,不要告诉我你不会手动敲一遍代码!!!!! 一、生成二维码 二维码作为一种信息传输工具,在当今社会发挥着重要作用。...Python,我们可以通过myqr模块生成QR码。要生成二维码,我们需要两代码。...二、生成词云 Word cloud是一种很好数据可视化方法。我们可以通过word cloud直接看到一些单词频率。使用python,我们通过word cloud模块生成wordcloud。...详细分析请参考Python自然语言处理只需要5代码。 五、识别是否带了口罩 这也是使用PaddlePaddle产品。...如果你对准确性不满意,可以使用百度通用文本界面。 八、绘制函数图像 图标是数据可视化重要工具。MatplotlibPython数据可视化起着重要作用。

1.8K10
领券