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

Kotlin 作用函数 runletapplyalso 的使用

上一篇文章我们介绍了作用函数,并以其中一个作用函数run为例,介绍了作用函数使用和原理。...除了run之外,Kotlin 官方还内置了let,apply,also这几个作用函数,下面我们一起来他们的相同点和区别,并举例说明他们的使用场景。...2. run/let/apply/also 各自的使用场景举例 我们已经知道这 4 个作用函数的特点了,那么我们怎么用好它们呢?下面一起来看下这几个作用函数使用场景。...当 lambda 会用到类的this时,建议使用also。 3. 只有 4 个作用函数?...剩下的几个使用需求没有那么的迫切,但掌握之后,可以帮助你写出更有 Kotlin 味道的代码。 下一篇文章会介绍 Standard.kt 中剩余的作用函数

1.4K10

使用C语言中的头文件什么技巧和注意事项?为什么直接包含C文件呢?

C语言头文件什么用处 在平时项目开发过程中特别是几个项目组在一起工作的时候,有的时候代码不是完全开放的,这个时候头文件和库的作用就体现出来了,在头文件中可以看到这个模块使用的结构体,以及静态变量或者定义的一些宏...,最主要的看到这个模块使用函数列表,同时有些关键函数的功能还会在头文件里面做出说明,通常在项目推进过程中就可以通过头文件调用库里面的函数,从而完成单元测试。...就可以使用printf函数打印东西了,有时候发现不带头文件有些系统函数也能被调用起来,主要C语言比较灵活,这种一般在编译的时候会处警告,搞不影响编译通过,C语言的编译通常来讲比较随意,所以在运行过程中可能出现崩溃现象...使用C语言头文件需要注意事项 头文件的里面主要声明一些函数列表,定义一些宏,还会定义一些核心结构体,还会有一些静态全局变量,头文件中尽量不要使用全局变量,因为全局变量在管理上会显得麻烦很多,增加出现问题的概率...当然在实际的开发过程中头文件设置成什么样子还和编程能力水平一定的关系,在模块设计过程中讲究的高内聚低耦合,在模块内部使用函数就不要暴露在头文件中,防止外来的操作对模块的数据造成破坏,所以在设计头文件的时候暴露在外部的函数列表是深思熟虑的

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

Kotlin 初体验:主要特征与应用

因为Alice的年龄没有指定,Elvis运算符使用零代替了它,所以Bob幸运地成了年纪最大的人。 喜欢这样的代码 ? 继续读下去,你将会学习到更多,并成为一名Kotlin 专家。...相反,对所 开发过程中涌现的任务,Kotlin 都提供了全面的生产力提升。它借助支持特定领 编程范式的库,提供了卓越的集成水准。...不可变性——使用不可变对象,这保证了它们的状态在其创建之后不能再变化。 无副作用——使用的是纯函数。此类函数在输入相同时会产生同样的结果,并且不会修改其他对象的状态,也不会和外面的世界交互。...没有副作用函数可以独立地进行测 试,因为不需要写大量的设置代码来构造它们所依赖的整个环境。...当你需要的时候, 可以使用可变数据,也可以编写带副作用函数,而且不需要跳过任何多余的步骤。然后,毫无疑问的是,在 Kotlin使用基于接口和类层次结构的库就像Java 一样简 单。

82530

【翻译】Kotlin致简代码之路

通过介绍这个列子可以显示出 Kotlin 有助于减少语法噪点,并保持函数小且富有表达力。 无副作用 致简代码告诉我们应该减少副作用。...我们不应该制造出那些一看到函数名称就感觉意图不明显,发生非期望中的隐藏的变化。但是副作用到底是什么问题呢?...副作用的代码容易产生错误,很难以理解,很难做测试,不容易并行化运行(非线程安全),不能被缓存并且不能做到延迟加载。我们可以通过函数式编程的概念来避免副作用的产生。...这基本上就意味着编写纯函数(等于无副作用函数)。...空安全实践 让我们假定有一个嵌套的层级结构:一个订单一个客户属性,客户拥有一个地址,因此也就有了城市的信息。现在,我们想要深入这个层级获取相应城市信息。这是一个很常见的使用情形。

1.4K30

Kotlin实战【二】Kotlin基本要素

作为一个静态类型语言,Kotlin不是要求每个表达式都应该在编译期具有类型?事实上,每个变量和表达式都有返回类型。...实际中的函数通常非常长,可能包含很多返回语句,显示的返回类型和语句可以帮助你快速的知道什么被返回。...只有需要的时候,才变为var。***使用不可变引用、不可变对象及无无副作用函数让你的代码更接近函数式编程风格***。 定义了val变量的代码块执行期间,val变量只能进行唯一一次初始化。...} # 二、类和属性 面向对象编程可能不是什么新鲜话题,Kotlin这方面也似曾相识,但是你会发现许多常见的任务使用更少的代码就可以完成...Kotlin也像Java,包的概念。每个Kotlin文件在开头package语句,文件中所有的声明(类、函数和属性)将放在这个包下。

1.1K20

如何正确的在 Android 上使用协程 ?

这两点,也正是使用协程中所需要注意的。既然建议直接使用 GlobalScope,我们就先试验一下使用它会是什么效果。...程序代码通常应该使用自定义的协程作用。直接使用 GlobalScope 的 async 或者 launch 方法是强烈建议的。...MainScope 官方文档中提到要使用自定义的协程作用,当然,Kotlin 已经给我们提供了合适的协程作用 MainScope 。...那么如何在 ViewModel 中定义协程作用呢?还记得上面 MainScope() 的定义?没错,搬过来直接使用就可以了。...引入如下依赖: implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.2.0-alpha03" 然后,什么都不需要做,直接使用协程作用

2.7K30

kotlin和java语言_我希望Java可以从Kotlin语言中窃取的10个功能

但是Ceylon具有Java 42之前无法提供的大量功能,我也希望独角兽。 我希望安全调用运算符(还有Elvis运算符,两者稍有不同),也可以用Java实现。...在某个时间点上,人们开始对产生副作用的事物使用语句,而对更具功能性的事物使用表达式。 因此,毫不奇怪,所有的String方法都是真正的表达式,对不可变的字符串进行操作,并始终返回新的字符串。    ...例如,这似乎与Java中的if-else不合适,后者可能包含块和语句,而每个块和语句都可能产生副作用。     但这真的是必要条件? 我们也不能用Java编写类似的东西?    ...毕竟,为什么呢?...从本质上说,一个函数与其参数类型是互变的,而其结果类型是协变的,那么对FunctionStream的更好定义是:    interface Function {} interface

1.1K00

JavaScript中eval和with语句如何影响作用链:探索深度知识

• 无论函数在哪里被调用,如何被调用,它的词法作用都只由函数被声明时所处的位置决定。...2.2 欺骗词法 • JavaScript 两种机制来实现这个目的。 2.2.1 eval(推荐使用) • JS 中的 eval(...) 函数可接收一个字符串作为参数。...函数接收一个多个声明的代码,会修改其所处的词法作用,而 with 声明实际上是根据你传递给它的对象凭空创建一个全新的词法作用。 • 另外推荐使用 eval(...)...无论引擎多聪明,试图将这些悲观情况的副作用限制在最小范围内,也无法避免如果没有这些优化,代码会运行得更慢这个事实。 2.3 小结 1. 词法作用意味着作用是由书写代码时函数声明的位置来决定。...这两个机制的副作用是引擎无法在编译时对作用查找进行优化的。所以, 不要使用他们。

7310

会写「18.dp」只是个入门——Kotlin 的扩展函数和属性(Extension FunctionsProperties)

Kotlin 的扩展函数 Float.pow() 在 Kotlin 里,我们用的不是 Java 的 Integer、Float、Double,而是另外几个名字相同相像的 Kotlin 自己新创造的类...扩展函数的写法 扩展函数写在哪都可以,但写的位置不同,作用就也不同。所谓作用就是说你能在哪些地方调用到它。...这也和成员函数作用很像——哪里能用到这个类,哪里就能用到类里的这个函数: package com.rengwuxian fun String.method1(i: Int) { ... }...那这……和成员函数什么区别?这种奇怪又绕脑子的知识什么?听我继续讲。...你为什么要把扩展函数写在类的里面?不就是为了让它不要被外界看见造成污染,是吧?

89710

【榨干 Kotlin】把函数当类用,Compose 风骚的作用机制

今天咱聊一下 Compose 的作用机制。「作用」这个词在 Compose 底层原理的角度它单独的含义,它是用来讨论在界面结构的组合过程中,每个层级之间的关系的一个关键概念。...不过今天,咱聊这个,我们来借着 Compose 的躯壳,聊一聊 Kotlin 语言这个层面的作用机制。...但是具体到作用这个问题,就有一个障碍:就像我刚才说的,它的组件不是用类写的,而是函数。...这样的话,虽然用的是 Kotlin,但我们还是没法像传统布局文件那样对作用做规则管理。直白点说就是,你想限制某个属性或者函数只能在指定的函数内部被调用,这是做不到的。 但是!实际情况却不是这样。...总结 Compose 是用 Kotlin 写的,它享受了 Kotlin 的便利,但也要承受 Kotlin 的限制。它用 Kotlin函数来实现了界面组件,就继承了「函数不具备作用」的缺陷。

12910

Kotlin | 作用函数

什么作用函数(Scope Functions)? Kotlin 标准库包含了几个特殊的函数,其目的是在调用对象的上下文环境(context)中执行代码块。...当你在提供了 lambda 表达式的对象上调用此类函数时,它会形成一个临时作用。在此作用内,你可以在不使用其名称的情况下访问该对象,这些函数被称为作用函数。...在 Kotlin 中,作用函数总共有五个,分别是:let、run、with、apply、also。接下来我们逐个详细分析。...由于这 5 个作用函数的性质有些相似,所以大家可能经常不知道在哪种情况下该使用哪个函数,以至于最终放弃使用作用函数?,所以为了避免类似悲剧发生,我们首先来讨论一下他们之间的区别以及使用场景。...每个作用函数两个主要区别: 引用上下文对象的方式 返回值 上下文对象(Context):this 还是 it this run、with 和 apply 通过 this 关键字引用一个 context

90430

Kotlin开发中的一些Tips

作用函数选择 目前有let、run、with、apply 和 also五个作用函数。...run { text = "Kotlin" textSize = 14f } 相比较来说使用run显得比较简洁,但let的优势在于可以将it重命名,提高代码的可读性,也可以避免作用函数嵌套时导致混淆上下文对象的情况...总的来说,这几种函数许多重叠的部分,因此可以根据开发中的具体情况来使用。以上仅做参考。 Sequence 我们经常会使用kotlin的集合操作符,比如 map 和 filter 等。...推荐扔物线大佬关于协程的文章,帮你更好的理解kotlin的协程:到底什么是「非阻塞式」挂起?协程真的更轻量级?...既然Kotlin中没有这个机制已经是既成事实,那么我们在使用中就需要考虑它带来的影响。比如我们开发中在调用一些方法时,要注意看一下源码中是否指定异常抛出,然后做相应处理,避免不必要的崩溃。

52220

Kotlin 作用函数(scope function)

绕不开的四兄弟 学习 Kotlin 一定绕不开 run/let/apply/also 这四兄弟,它们是 Kotlin 使用频率最高的扩展方法(扩展方法在之前文章介绍),它们也被称为作用函数(scope...对于了解到这个额外信息的 Kotlin 编译器,他就可以更有针对性的优化这里的代码(怎么针对,也还没有学到。。)。 4. 为何 Java 没有作用函数?...作用函数需要类扩展和内联这两个能力,才能最大化体现其价值。...而没有内联能力的 Java,虽然 JVM 内联优化支撑,但内联优化只对 final 且调用次数数量级较大的方法有效。如果像 Kotlin 这样规模化的使用作用函数,对性能是不可忽视的影响的。...其他作用函数使用和适用场景 下一篇! 版权所有,转载请注明出处: https://sickworm.com/?p=1823

97710

从 Java 到 Kotlin,再从 Kotlin 回归 Java

数据类 开放类 陡峭的学习曲线 ? 名称遮掩 ? 这是 Kotlin 让我感到最大惊喜的地方。看看这个函数: ? 当你调用 inc(1) 的时候会输出什么呢?...在 if 主体中,你可以添加另一个 num,这并不令人震惊(新的块级别作用)。 好的,在 Kotlin 中,inc(1) 输出 2。但是在Java中,等效代码将无法通过编译。 ?...这个多余的字母到底起什么作用?为什么要把名称和类型分隔开?我不知道。不过我知道这会加大使用Kotlin的难度。 第二个问题。...映射表中的键和值通过 to 运算符关联在一起,这很好,但是为什么使用大家都熟悉的冒号(:)?真是令人失望! ? Maybe? ? 函数式编程语言(比如 Haskell)没有空(null)。...你无法扩展Data类将其抽象化。所以很可能,你不会在核心领域模型中使用它们。 这个局限性不是Kotlin的错。没有办法在违反Liskov原则的情况下生成正确的基于值的equals()实现。

1.8K40

翻译连载 |《你不知道的JS》姊妹篇 |《JavaScript 轻量级函数式编程》- 第 5 章:减少副作用

函数依赖于 bar 的值,bar 作为一个自由变量被第二个函数引用。 所以说这个函数还依赖于其他的原因? 我认为。...是可靠的纯函数!?。 :( 我们只防范我们可以控制的副作用(通过引用改变)。我们传递的任何带有副作用函数,都将会污染 simpleList(..)...如果用引用透明定义一个纯函数,读者就不必这样做了。 不够透明? 那么如果一个副作用函数,并且这个副作用在程序的其他地方没有被观察到或者依赖会怎么样?这个功能还具有引用透明性?...如果副作用可能发生,作者和读者必须尽量应对它们。使它们不发生,作者和读者都要对任何可能不可能发生的事情更有自信。 纯化 如果你不纯的函数,且你无法将其重构为纯函数,此时你能做些什么?...封闭的影响 如果副作用的本质是使用词法自由变量,并且您可以选择修改周围的代码,那么您可以使用作用来封装它们。

1.2K70

Kotlin 函数式编程思想 FP in KotlinKotlin

Kotlin 函数式编程思想 : FP in Kotlin 函数式编程特性 闭包和高阶函数 函数编程支持函数作为第一类对象,有时称为闭包或者仿函数(functor)对象。...没有"副作用" 所谓"副作用"(side effect),指的是函数内部与外部互动(最典型的情况,就是修改全局变量的值),产生运算以外的其他结果。...函数式编程强调没有"副作用",意味着函数要保持独立,所有功能就是返回一个新的值,没有其他行为,尤其是不得修改外部变量的值。 副作用是修改系统状态的语言结构。...因为 FP 语言包含任何赋值语句,变量值一旦被指派就永远不会改变。而且,调用函数只会计算出结果 ── 不会出现其他效果。因此,FP 语言没有副作用。...函数式编程好的实践在于对运算过程的高度抽象和没有”副作用”(既保持函数的独立性),函数式编程三板斧是函数式编程的典型范式,在编程中被大量使用,即使人们不关注函数式编程,在使用函数式编程语言的时候,也会不自觉的使用这些函数

32230

转向Kotlin——对象

由于Kotlin中没有静态成员的概念,因此Kotlin推出了一个有趣的语法糖:对象。那么对象能取代静态类成员?该怎么做呢?下面会详细介绍到。...如果将匿名对象用于public函数的返回值,或者public属性的类型,那么Kotlin编译器会将这些函数属性的返回类型重新定义为匿名对象的夫类型,如果匿名对象没有继承任何类,也没有实现任何接口,那么父类型就是...在Java中,匿名对象访问封闭作用内的变量,需要用final声明该变量,这也就意味着在匿名对象中无法修改封闭作用内变量的值。...在Java8中,如果只是使用封闭作用内的变量,该比那辆无需使用final,但一旦修改变量的值,就必须使用final进行修饰,其实在Java8中,,封闭作用的变量是一个隐式的final变量。...但是在Kotlin中,在匿名对象中就可以任意访问封闭作用内的变量,包括修改它的值: fun main(agrs: Array) { var n = 10

71330
领券