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

巧用Kotlin:内置函数let、also、with、run、apply大大提高你开发效率!

前言 Kotlin,有一些用于扩展 & 方便开发者编码内置函数,能大大提高开发者开发效率。...今天,我将主要讲解是: let函数 also函数 with函数 run函数 apply函数 ---- 基础知识:接口回调Lambda使用 Kotlin可使用Lambda函数简化一些不必要嵌套接口回调方法...对象给变量result ---- 3. with函数 3.1 作用 调用同一个对象多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可 3.2 应用场景 需要调用同一个对象多个方法...,即: 调用同一个对象多个方法 / 属性时,可以省去对象名重复,直接调用方法名 / 属性即可 定义一个变量特定作用域内 统一做判空处理 4.2 使用方法 object.run{ // ... }...函数 5.1 作用 & 应用场景 与run函数类似,但区别在于返回值: run函数返回最后一行值 / 表达式 apply函数返回传入对象本身 5.2 应用场景 对象实例初始化时需要对对象属性进行赋值

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

let,run,with,apply及also差异化分析

因为Kotlin,如果let块最后一条语句是非赋值语句,则默认情况下它是返回语句。 那如果我们将let块中最后一条语句修改为赋值语句,会发生什么变化?...可以看到我们将Book对象name值进行了赋值操作,同样对Book对象进行打印,但是最后控制台输出结果为“kotlin.Unit”,这是因为let函数块最后一句是赋值语句,print则将其当做是一个函数来看待...例如, let ,没有函数块返回值,最终会成为 Unit 类型,但在 apply ,最后返回对象本身 (T) 时,它成为 Book 类型。...apply & let apply不接受函数块返回值,返回是自己T类型对象,而let能返回apply上下文对象引用为“this”,let为“it”。...用于初始化对象或更改对象属性,可使用apply 如果将数据指派给接收对象属性之前验证对象,可使用also 如果将对象进行空检查并访问或修改其属性,可使用let 如果是非null对象并且当函数块不需要返回值时

56250

From Java To Kotlin:空安全、扩展、函数、Lambda很详细,这次终于懂了

这也就意味着, Kotlin 里,一切都是对象。 --- 空安全(Null Safety ) 既然 Kotlin 一切都是对象,那么对象就有可能为空。...虽然具有简洁优点,但同时也存在两个缺点。 不支持懒加载。 不支持传参构造单例。 object:伴生对象 Kotlin 当中没有 static 关键字,所以我们没有办法直接定义静态方法和静态变量。...将函数“参数类型”和“返回值类型”抽象出来,加上(),->符号加工,就得到了“函数类型”。...--- 函数引用(Function reference) 普通变量有引用概念,我们可以将一个变量赋值给另一个变量,这一点,函数上也是同样适用,函数也有引用,并且也可以赋值给变量。...run(); } Kotlin 可以用 fun 修饰符 Kotlin 声明一个函数式接口: // 注意 interface 前 fun fun interface KRunnable {

1.2K80

Kotlin 基础 | 拒绝语法噪音

kotlin中都可以通过赋值语法来操作。...when是一个表达式,这意味着它有返回值,返回值等于命中分支中最后一条语句返回值。 default javadefault保留字用于接口中默认方法实现。kotlin可以省去它。...这样定义好处是,可以在任何时候任何地方给类添加功能。 扩展函数,可以像类其他成员函数一样访问类属性和方法(除了被private和protected修饰成员)。...对于object.apply{lambda}可以简单理解为:object对象上应用lambda操作,并且最终返回object对象本身。...新建对象时不需要new,而是直接调用构造函数。 语句末尾不需要; 但加上也不会有语法错误。 kotlin 类和方法默认是final,他们不能被继承和重写。只有通过加上open才能被继承和重写。

1.1K30

JavaScript 函数

因为函数和变量声明时候,会被前置到当前作用域顶端。例1将函数声明 function add(a, b) 前置到作用域前端,例2将声明 var add 前置到其作用域前端了,并没有赋值。...赋值过程是函数执行到响应位置时候才进行Function 构造器 除了函数声明、函数表达式。还有一种创建函数对象方式,是使用函数构造器。...严格模式下,代码改变实参失效。即 x 仍为 1。同时 callee 属性失效。 关于 callee callee 属性初始值就是正被执行 Function 对象。...计算机科学,柯里化(Currying)是把接受多个参数函数变换成接受一个单一参数(最初函数第一个参数)函数,并且返回接受余下参数且返回结果新函数技术。...第二个参数 100 传给了 add 函数形参 a,并赋值给一个新函数对象 func。 这时,func(1, 2) 即相当于传入两个参数,所以结果为 103。

49710

javascript——函数、变量和方法

对象方法 绑定到对象函数被称为方法 一个对象绑定函数,称为这个对象方法 1.this 下面段代码返回是(今年年份-出生年份) var xm = { name: 'xiaoming...,它始终指向当前对象,也就是xm这个变量 所以this.birth指就是变量xmbirth属性 this存在于方法,想在方法调用对象属性,必须通过this 如果在方法写在对象外部时,this指向问题就要好好分析了...this指向又有问题了,它指向第一层方法,而不是方法对应对象 所以,写方法时候,直接先声明一个var that = this,这个that指向对象里面的属性,接下来,方法里面调用属性时候,直接在前面加上...that.指向属性,不管套了几层方法,都不会报错,直接指向对象下面的属性 通过var that = this,可以放心方法里面定义其他函数,不用担心获取不到对象属性问题 但是有一个需要注意地方,...每个方法结束,都要返回一下结果,return getbirthage() 3.apply 除了var that = this,还可以通过apply属性控制this指向 apply是函数本身方法,它拥有两个参数

1.1K20

Kotlin | 一份10万字随查笔记,妈妈再也不担心我不会Ctrl+F了

属性初始化 属性初始化尽量构造方法完成 无法构造方法初始化,尝试降级为局部变量 var 用 lateinit 延迟初始化,val 用 lazy 可空类型谨慎用 null 直接初始化 class...里面具有返回值,所以称为表达式 表达式与完备性 (即在用 if表达式 赋值时,所有条件都必须完整) val x=if(b<0) 0 else b val x=if(b<0) 0 //错误,赋值时,分支必须完备...每个类可以对应一个伴生对象 伴生对象成员全局独一份(对于类来说) 伴生对象成员类似 Java 静态成员 Kotlin,静态成员考虑用包级函数,包级变量替代 JvmField 和 JvmStatic...泛华类型或者说类型抽象 鸭子类型是动态类型和静态语言一种对象推断分格,鸭子类型,关注不是对象类型本身,而是他是如何使用,也就是说我们只关注它行为。...,当属性值被修改往外部抛出一个变更回调。

2.6K20

kotlin Standard内联函数示例详解

let、with、run、apply、also、takeIf、takeUnless、repeat函数使用 kotlin Standard.kt文件,提供了一些内联函数,这些内联函数可以减少代码量,...apply函数返回为传入对象本身。...apply函数一般结构如下: apply函数一般结构如下: obj.apply { this.todo todo//this可省略 ... } 使用实例:给对象赋值 var user =...User().apply { account = "12306" } 适用场景: apply函数和run函数除了返回值外,整体功能和作用类似,一般用于对象初始化时对属性进行赋值。...结语: Kotlin Standard.kt标准库函数已基本讲解完毕,其中涉及到了高阶函数和lambda函数,相关知识可通过官方文档学习,同时建议读者将每个函数都实际敲一遍,并通过查看他们编译

65310

Kotlin入门(13)类成员众生相

其实此处代码逻辑很简单,仅仅是把构造函数输入参数保存到类属性,不管输入参数有几个,该类都依样画瓢声明同样数量属性字段并加以赋值。...而改动代码,其运行结果和手工添加属性声明并赋值代码是一样。...下面是补充了新属性之后类代码: class WildAnimalMember (var name:String, val sex:Int = 0) { //非空成员属性必须在声明时赋值或者构造函数赋值...利用伴生对象技术,即可间接实现静态成员功能,前面有个代码从性别类型获得性别名称,反过来也可以从性别名称获得性别类型,这个功能便可以伴生对象定义一个judgeSex方法判断性别类型。...方法,输入“公”或者“雄”时,将返回0;输入“母”或者“雌”时,将返回1。

55620

JavaScript面向对象精要(一)

传统面向对象语言几大特征:封装、继承、多态,JavaScript并不适用。JavaScript弱类型特征允许你用比其他语言更少代码完成同样任务。无需提前设计好类再进行编码。...二、函数 函数也是对象。使函数不同于其他对象特性是其内部具有[[Call]]属性。该属性无法通过代码访问而是定义了代码执行时行为。...ECMAScript定义typeof操作符对任何具有[[Call]]属性对象返回function”。...示例:判断是否为function typeof function(){}; // "function" typeof /\./; // "object" 注意:某些浏览器曾经正则表达式包含...但当你希望赋值操作会触发一些行为或者读取值需要通过计算所需返回值得到时,访问器属性会非常有用。

50151

猿创征文| ES 6 学习笔记6- Proxy

Proxy 可以理解成,目标对象之前架设一层​“拦截”​,外界对该对象访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界访问进行过滤和改写。...(7)​​ownKeys(target)​  该方法返回目标对象所有自身属性属性名。...如果没有这个拦截函数,访问不存在属性,只会返回​undefined​。 ​set()​ ​set​方法用来拦截某个属性赋值操作​。...由于设置了​存值函数set​,任何不符合要求​age属性赋值都会抛出一个错误。...直接调用​Reflect.apply​方法也会被拦截。 ​has()​ ​has​方法用来拦截​HasProperty​操作,即判断对象是否具有某个属性时,这个方法会生效。

31920

Kotlin 变量、常量和类型

数据类型 数值类型 Kotlin,一切都是一个对象,你可以调用任何变量成员函数和属性。... Kotlin 声明变量,就是标识符前面加上关键字 var。 变量一旦赋值就不能更改。要声明只读变量,使用 val 关键字。常量一旦初始化就不能再被修改。...因为一方面 val 声明变量是只读,一旦初始化不能修改,这可以避免程序运行过程错误地修改变量内容;另一方面声明引用类型使用 val,对象引用不会被修改,但是引用内容可以修改,这样会更加安全,也符合函数式编程技术要求...可空类型具体使用时会有一些限制: 不能直接调用可空类型对象函数或属性。 不能把可空类型数据赋值给非空类型变量。 不能把可空类型数据传递给非空类型参数函数。...赋值与显式转换 Kotlin 是一种安全语言,对于类型检查非常严格,不同类型数值进行赋值是禁止. Kotlin要想实现这种赋值转换,需要使用转换函数显式转换。

91410

Kotlin入门教程,快使用Kotlin

,这样可以像Java那样如果为空就报空指针异常,还有一种是字段加?,这样可以不做处理返回null或者配合?:(相当于Java三元运算)做判空处理: 1//类型后面加?...单例模式),可以直接通过 类名.方法名或者类名.属性名来直接调用该类方法或者属性。...,而次构造函数类体申明; 主构造函数没有任何修饰符时可以省略constructor关键字,而次构造函数不能省略; 主构造函数不能包含任何代码,而次构造函数可以; 主构造函数参数可以类体属性初始化代码和初始化块中使用...下面列举kotlin中常用几个函数,用法可以参考:Kotlinlet、also、with、apply函数 1.1、let函数 let扩展函数实际上是一个作用域函数,当你需要去定义一个变量一个特定作用域范围内...函数 apply和run差不多,不同apply函数返回是他传入对象 使用场景:apply一般用于一个对象实例初始化时候,需要对对象属性进行赋值

97210

Kotlin入门(25)共享参数模板

() //commit方法和apply方法都表示提交修改     } } 外部使用该工具类之时,可在Activity代码声明来自于Preference委托属性,委托属性一旦声明,则它初始值便是从共享参数读取数值...;后续代码若给委托属性赋值,则立即触发写入动作,把该属性最新值保存到共享参数。...联想到Kotlin还有类似的关键字名叫lateinit,意思是延迟初始化,加上lazy可以归纳出Kotlin变量三种初始化操作,具体说明如下: 1、声明时赋值:这是最常见变量初始化,声明某个变量时...它先于函数体语句执行,并且头部语句返回一个对象,函数体语句对象命名空间中运行;即体语句可以直接调用该对象方法,而无需显式指定该对象实例名称。 2、函数体语句:体语句位于常规大括号内部。...它要等头部语句执行完毕才会执行,同时体语句头部语句返回对象命名空间中运行;即体语句允许直接调用头部对象方法,而无需显式指定该对象实例名称。

85610

Decorator 从原理到实践

,prop,descriptor) ojb:要在其上定义属性对象 prop:要定义或修改属性名称 descriptor:将被定义或修改属性描述符 该方法返回被传递给函数对象 ES6,由于...通过赋值操作添加普通属性是可枚举,能够属性枚举期间呈现出来(for…in 或 Object.keys 方法), 这些属性值可以被改变,也可以被删除。这个方法允许修改默认额外选项(或配置)。...默认为 false enumerable 当且仅当该属性enumerable为true时,该属性才能够出现在对象枚举属性。默认为 false。...所以它和Object.defineProperty具有一致形参: obj:作用目标对象 prop:作用属性名 descriptor:针对该属性描述符 下面看下简单使用 class使用 创建一个新...class成员使用 这类装饰器写法应该就是我们最为熟知了,会接受三个参数: 如果装饰器挂载静态成员上,则会返回构造函数,如果挂载实例成员上,则返回原型 装饰器挂载成员名称 Object.getOwnPropertyDescriptor

50540

Kotlin】变量简介 ( 可空类型 | lateinit | 初始化判定 | 非空类型 | !! 与 ? 修饰符 | ?= ?. ?: 运算符 | 抽象属性变量)

Kotlin 变量分类 : Kotlin 变量分为两种 , 非空变量 和 可空变量 , 其中非空变量是困扰广大 Java 开发者一大难题 , 因为 Java 没有非空变量这个概念 , Kotlin...等操作 , Java 所有变量都是可空 ; 2 . Kotlin 变量默认状态 : Kotlin 变量默认是非空变量 , 默认状态下 , Kotlin 必须进行初始化 ; 3 ....特殊情况 : 如果是非空对象是抽象类抽象属性 , 那么可以不进行初始化 , 但在其实现 , 也是必须进行初始化或者延迟初始化 ; III . 非空变量不能赋空 ---- 1 ....本类判定 : 延迟初始化 属性 只能在本类中使用 this::属性名称.isInitialized 进行判定 , 如果返回 true , 说明已经初始化 , 如果返回 false , 说明该属性还没有进行初始化...: 运算符 : 该运算符是双目运算符 , 作用是前者如果为空 , 那么取后者值 ; ① 与 Java 三木运算符 对比 : Kotlin 这个运算符与 Java 不太一样 , 这也是一个双目运算符

2.4K20

js进阶手写常见函数

手写apply、call、bind 每个Function对象都存在apply()、call()、bind() 方法,其作用都是可以特定作用域 调用函数,等于设置函数体内this对象值,以扩充函数赖以运行作用域...根据this是谁调用就指向谁原理,将this指向函数 赋值给base对象一个属性 base.fn=this // 3.执行函数,调用base.fn时,fn函数指向 base对象 let...根据this是谁调用就指向谁原理,将this指向函数 赋值给base对象一个属性 base.fn=this // 3.执行函数,调用base.fn时,fn函数指向 base对象 let...根据this是谁调用就指向谁原理,将this指向函数 赋值给base对象一个属性 base.fn = this; // 3.执行函数,调用base.fn时,fn函数指向 base...手写防抖和节流 持续触发某一事件,延迟n秒执行回调,未到n秒再次触发,会从新出发倒计时 持续触发某一时间,延迟n秒执行回调,未达到n秒再次出发,不会重新计时 两者使用场景 防抖可能用于无法预知用户主动行为

37720
领券