首页
学习
活动
专区
圈层
工具
发布

Kotlin之Elvis 操作符

Elvis 操作符的优先级 首先要注意到,Elvis 操作符的优先级是比较低的,特别是比加减乘除的运算符低,混合运算时一定要记得加上括号。...配合使用时的问题 Elvis 操作符与安全调用符 ?. 配合使用时,一定要考虑到安全调用符前后是否为空,否则就会带来流程控制混乱的问题。对于任何一个下列的表达式: val v = a?.b ?...: 与流程控制语句的搭配使用 我发了一个 Kotlin 写的前序遍历二叉树的 Gist,地址在这里:PreOrderTraversing.kt,整个项目:DataStructureLearning-Kotlin...: return list,这句代码的逻辑如下: if(root == null) return list stack.push(root) 此外,Elvis 还可以配合 break 和 continue...改良 Elvis Elvis 操作符很方便,但只能连接表达式,我们可以写一个扩展函数来作为加强版的 Elvis 操作符。 inline infix fun T?.

63650

Kotlin之Elvis 操作符

Elvis 操作符的优先级 首先要注意到,Elvis 操作符的优先级是比较低的,特别是比加减乘除的运算符低,混合运算时一定要记得加上括号。...配合使用时的问题 Elvis 操作符与安全调用符 ?. 配合使用时,一定要考虑到安全调用符前后是否为空,否则就会带来流程控制混乱的问题。对于任何一个下列的表达式: val v = a?.b ?...: 与流程控制语句的搭配使用 我发了一个 Kotlin 写的前序遍历二叉树的 Gist,地址在这里:PreOrderTraversing.kt,整个项目:DataStructureLearning-Kotlin...: return list,这句代码的逻辑如下: if(root == null) return list stack.push(root) 此外,Elvis 还可以配合 break 和 continue...改良 Elvis Elvis 操作符很方便,但只能连接表达式,我们可以写一个扩展函数来作为加强版的 Elvis 操作符。 inline infix fun T?.

1.4K100
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    第2章 Kotlin 语法基础第2章 Kotlin 语法基础

    因为事实上在程序中大部分地方只需要使用不可变的变量。使用val变量可以带来可预测的行为和线程安全等优点。 变量名就是标识符。标识符是由字母、数字、下划线组成的字符序列,不能以数字开头。...行为)。...我们可以用Label标签来控制 return、break 或 continue的跳转(jump)行为。...2.4.3 二元操作符 Kotlin中的二元操作符有算术运算符、索引访问操作符、调用操作符、计算并赋值操作符、相等与不等操作符、Elvis 操作符、比较操作符、中缀操作符等。下面我们分别作介绍。...Kotlin中没有这样的三元运算符 true?1:0,取而代之的是if(true) 1 else 0。而Elvis操作符算是精简版的三元运算符。

    3.1K20

    《Kotlin极简教程》第3章 Kotlin语言基础第3章 Kotlin语言基础《Kotlin极简教程》正式上架:参考资料

    在Kotlin中,更简洁的、更常用的场景是:只要可能,尽量在Kotlin中首选使用val不变值。因为事实上在程序中大部分地方使用不可变的变量,可带来很多益处,如:可预测的行为和线程安全。...匿名函数内部的 return 语句将从该匿名函数自身返回。 在Kotlin中,这是匿名函数和 lambda 表达式行为不一致的地方。...我们可以用Label标签来控制 return、break 或 continue的跳转(jump)行为。 Kotlin 的函数是可以被嵌套的。它有函数字面量、局部函数等。...Kotlin中没有这样的三元运算符 true?1:0,取而代之的是if(true) 1 else 0。而Elvis操作符算是精简版的三元运算符。...,因此对扩展的属性来说,它的行为只能由显式提供的 getters/setters 定义。

    1.9K20

    必须掌握的4个RDD算子之flatMap算子

    第三个flatMap:从元素到集合、再从集合到元素 flatMap 其实和 map 与 mapPartitions 算子类似,在功能上,与 map 和 mapPartitions 一样,flatMap...这里我们先给出代码实现,然后再分阶段地分析 flatMap 的映射过程: // 读取文件内容 val lineRDD: RDD[String] = _ // 请参考第一讲获取完整代码 // 以行为单位提取相邻单词...这里 f 的形参是 String 类型的 line,也就是源文件中的一行文本,而 f 的返回类型是 Array[String],也就是 String 类型的数组。...回顾 map 与 mapPartitions 这两个算子,我们会发现,转换前后 RDD 的元素类型,与映射函数 f 的类型是一致的。...你不妨结合文稿中的代码与第一讲中 Word Count 的代码,去实现完整版的“相邻词汇计数统计”。

    2.1K10

    Java和 Kotlin中的常见NPE

    这种情况在Kotlin里几乎不再是问题,因为Kotlin从语言层面引入了空安全支持,彻底减少了NPE的出现概率。下面我们看看两种语言是如何应对NPE的,通过示例展示常见的编程场景。...,它的作用是如果a为空就返回null,而不是抛出异常。?:称为Elvis操作符,它为null的情况指定一个默认值。这样代码是很安全又简洁,非常适合日常开发中使用。...三、Elvis 操作符:提供默认值Elvis操作符(?:)可以在变量为null时提供默认值。...六、Kotlin 的优势总结综上总结,Kotlin通过编译时的空检查、可空类型支持和安全调用等功能,几乎不会发生了NPE的发生。Java虽然引入了Optional类解决空值问题,但整体语法很繁琐。...在日常开发中,Kotlin让代码更流畅、更安全,从Java转向Kotlin的开发者可以充分体验到空安全特性的便捷,减少了处理空值所带来的麻烦。

    49520

    必须掌握的4个RDD算子之map算子

    以元素为粒度的数据转换 点击跳转到下一讲 序章 第一个map. 以元素为粒度的数据转换 我们先来说说 map 算子的用法:给定映射函数 f,map(f) 以元素为粒度对 RDD 做数据转换。...[String] = _ val kvRDD: RDD[(String, Int)] = cleanWordRDD.map(word => (word, 1)) 在上面的代码实现中,传递给 map 算子的形参...在做 RDD 数据转换的时候,我们只需把函数 f 传递给 map 算子即可。...不管 f 是匿名函数,还是带名函数,map 算子的转换逻辑都是一样的,你不妨把以上两种实现方式分别敲入到 spark-shell,去验证执行结果的一致性。...到这里为止,我们就掌握了 map 算子的基本用法。现在你就可以定义任意复杂的映射函数 f,然后在 RDD 之上通过调用 map(f) 去翻着花样地做各种各样的数据转换。

    72230

    必须掌握的4个RDD算子之filter算子

    第四个filter:过滤 RDD 在今天的最后,我们再来学习一下,与 map 一样常用的算子:filter。filter,顾名思义,这个算子的作用,是对 RDD 进行过滤。...就像是 map 算子依赖其映射函数一样,filter 算子也需要借助一个判定函数 f,才能实现对 RDD 的过滤转换。所谓判定函数,它指的是类型为(RDD 元素类型) => (Boolean)的函数。...最后,我们学习了 filter 算子,filter 算子的用法与 map 很像,它需要借助判定函数 f 来完成对 RDD 的数据过滤。...RDD 中的元素是否能够得以保留,取决于判定函数 f 的返回值是 True 还是 False。 虽然今天我们只学了 4 个算子,但这 4 个算子在日常开发中的出现频率非常之高。...掌握了这几个简单的 RDD 算子,你几乎可以应对 RDD 中 90% 的数据转换场景。希望你对这几个算子多多加以练习,从而在日常的开发工作中学以致用

    1.7K30

    必须掌握的4个RDD算子之mapPartitions算子

    第二个mapPartitions:以数据分区为粒度的数据转换 按照介绍算子的惯例,我们还是先来说说 mapPartitions 的用法。...这和前一个版本的实现,有什么本质上的区别呢?” 仔细观察,你就会发现,相比前一个版本,我们把实例化 MD5 对象的语句挪到了 map 算子之外。...通过下图的直观对比,你会发现,以数据分区为单位,mapPartitions 只需实例化一次 MD5 对象,而 map 算子却需要实例化多次,具体的次数则由分区内数据记录的数量来决定。...对于一个有着上百万条记录的 RDD 来说,其数据分区的划分往往是在百这个量级,因此,相比 map 算子,mapPartitions 可以显著降低对象实例化的计算开销,这对于 Spark 作业端到端的执行性能来说...除了计算哈希值以外,对于数据记录来说,凡是可以共享的操作,都可以用 mapPartitions 算子进行优化。

    1.6K20

    Kotlin 如何优雅地使用 Scope Functions

    作用域函数:它是 Kotlin 标准库的函数,其唯一目的是在对象的上下文中执行代码块。 当您在提供了 lambda 表达式的对象上调用此类函数时,它会形成一个临时范围。...2.1 借助 Elvis 操作符 Elvis 操作符是三目条件运算符的简略写法,对于 x = foo() ?...foo() : bar() 形式的运算符,可以用 Elvis 操作符写为 x = foo() ?: bar() 的形式。...在 Kotlin 中借助 Elvis 操作符配合安全调用符,实现简单清晰的空检查和空操作。 //根据client_id查询 request.deviceClientId?....总结 Kotlin 本身是一种很灵活的语言,用好它来写代码不是一件容易的事情,需要不断地去学习和总结。本文仅仅是抛砖引玉,希望能给大家带来更多的启发性。

    1.1K30

    第3章 Kotlin 可空类型与类型系统第3章 Kotlin 可空类型与类型系统

    这个Array中定义了get, set 算子函数, 同时有一个size 属性代表数组的长度,还有一个返回数组元素的迭代子 Iterator的函数iterator()。...还有Java 8 Optional 提供的orElse s.orElse("").length(); 这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了: s?.length ?...length kotlin.KotlinNullPointerException 3.3.2 Elvis运算符 ?...: 使用Elvis操作符来给定一个在是null的情况下的替代值 >>> nullableStr null >>> var s= nullableStr?...本章小结 Kotlin通过引入可空类型,在编译时就大量“清扫了”空指针异常。同时,Kotlin中还引入了安全调用符(?.) 以及Elvis操作符( ?: ) , 使得我们的代码写起来更加简洁。

    2.4K20

    Kotlin入门学习,从零基础入门到精通 ,Kotlin超详细教程

    Kotlin语言简介与环境搭建 重点详细内容知识点总结 Kotlin简介:Kotlin是一种在Java虚拟机(JVM)上运行的静态类型编程语言,由JetBrains公司开发,旨在简化Java代码的编写,...阅读Kotlin官方文档,了解Kotlin的基本概念和语法。 2....、Elvis操作符(?:)等处理null值的机制。 如何学习该知识 通过编写包含null值的Kotlin代码,练习使用安全调用、Elvis操作符等处理null值的机制。...继承与多态:Kotlin支持类的继承和多态性,子类可以重写父类的方法。 接口与抽象类:Kotlin中的接口和抽象类用于定义类的行为规范和抽象方法。...通过本教程的学习,读者可以全面掌握Kotlin语言的精髓和实际应用技巧,为后续的Kotlin项目开发和Android应用开发打下坚实的基础。本教程适合Kotlin初学者和有一定编程经验的开发者阅读。

    1.2K10

    干货 | Kotlin超棒的语言特性

    这些语言特性包括空安全、Elvis表达式、简洁字符串等等。 01更加安全的指针操作 在Kotlin中,一切皆是对象。不存在int, double等关键字,只存在Int, Double等类。...表达式和Elvis表达式 Kotlin特有的?表达式和Elvis表达式可以在确保安全的情况下,写出更加简洁的代码。比如我们在Android页面开发中常见的删除子控件操作,用Java来写是这样的: ?...表达式,Kotlin还有个大杀器叫Elvis表达式,即?: 表达式,这两个表达式加在一起可以以超简洁的形式表述一个复杂逻辑。 ? 以上面表达式为例,我们以红线把它划分成两个部分。...若前面部分为null,则整个表达式返回值等于c的值,否则等于前面部分的值。把它翻译成Java代码,是这样的 ? 同样等同于这样 ? 即Elvis表达式的含义在于为整个 ?...表达式托底,即若整个表达式已经为null的情况下,Elvis表达式能够让这个表达式有个自定义的默认值。这样进一步保证了空安全,同时代码也不失简洁性。

    1.7K40

    思考sobel算子的原理

    本文从离散微积分和卷积操作两个基础知识点开始,来介绍神经网络中的卷积神经网络。最后,在卷积操作的基础之上,深究sobel算子的原理与设计思想。...本文内容有助于理解卷积神经网络更底层的原理,为深度学习中其它知识的延申打好基础。也可以作为《深度学习之TensorFlow入门、原理与进阶实战》一书的扩展阅读。 (本文3000字左右,10张配图。...预计阅读时间2分钟,思考时间15分钟) 文章结构 1 离散微分与离散积分 2 卷积分及其数学意义 3 卷积神经网络及其工作过程 4 解密Sobel算子 4.1. Sobel算子结构 4.2....Sobel算子的计算过程 4.3. Sobel算子的原理 1 离散微分与离散积分 微积分是微分和积分的总称,微分就是无限细分,积分就是无限求和。大脑在处理视觉时,本身就是一个先微分再积分的过程。...在微积分中,无限细分的条件是,被细分的对象必须是连续的。例如一条直线就可以被无限细分,而由若干个点注成的虚线就无法连续细分。 ? 图1

    91620

    Kotlin学习之路(2)数据类型

    = 0 Kotlin声明语句是“变量名”:“变量类型”,而不是Java常见的“变量类型 变量名”这种格式,在这里你会惊奇的发现Kotlin与Java正好相反,Kotlin声明完毕无需分号,直接回车即可...简单来说Kotlin不支持范围小的数据类型隐式转为取值大的类型。在Kotlin中不允许通过Java的前缀表达式来强制转换类型!...name 表示获取user dog name 的属性,如果user 或者user.dog 为null 整个表达式返回为null (4)Elvis运算 Elvis运算也算是一种小技巧,其实也就是if else...= null) b.length else -1 //使用Elvis运算 var len2 = b?.length?:-1 Elvis的含义如果“?...:” 右面表达式的值 小结 通过这次学习应该要掌握的技能 (1) 学会Kotlin对数据类型的变量定义以及变量之间的相互转换 (2) 学会Kotlin对字符串的一些操作 (3) 了解Kotlin一些关键字

    96420

    Java 8中的Optional 类型与 Kotlin 中的可空类型Java 8中的Optional 类型与 Kotlin 中的可空类型Kotlin 中的可空类型《Kotlin极简教程》正式上架:

    Java 8中的Optional 类型与 Kotlin 中的可空类型 在 Java 8中,我们可以使用 Optional 类型来表达可空的类型。...Kotlin 中的可空类型 上面 Java 8的例子,用 Kotlin 来写就显得更加简单优雅了: package com.easy.kotlin fun main(args: Array的orElse s.orElse("").length(); 这个东东,在 Kotlin 是最最常见不过的 Elvis 运算符了: s?.length ?...: 0 相比之下,还有什么理由继续用 Java 8 的 Optional 呢? Kotlin 中的明星符号 ?????????????????????????????????????? ?: ?: ?...示例源代码工程Github 地址: https://github.com/EasyKotlin/java_optional_vs_kotlin_nullable_type 非常感谢您亲爱的读者,大家请多支持

    3.2K10

    Kotlin | 6.Kotlin 的类型系统

    // Kotlin中所有泛型类和泛型函数的类型参数默认都是可空的。...Elvis运算符的右边来做先决条件检查: // val address: String?...} } 总结 Kotlin 对可空类型的支持,可以帮助我们在编译期,检测出潜在的NullPointerException错误。 Kotlin 提供了像安全调用(?.)....)、 Elvis 运算符(?:)、非 言( !!)及let 函数这样的工具来简洁地处理可空类型。 as ?运算符提供了 种简单的方式来把值转换成 个类型,以及处理当它拥有不同类型时的情况。...当你在 Kotlin 中继承 Java 类或者实现 Java 接口时,你需要仔细考虑参数的可空性和可变性。 Kotlin的Array 类就像普通的泛型类 但它会被编译成 Java 数组。

    2.7K10

    【翻译】Kotlin致简代码之路

    这种自动转换叫做“智能转换”,在某些场合下直接淘汰了显示手动转换(再一次,更少的形式主义!)。另外我们可以把上面的那行代码变得更简短,通过使用 elvis 操作符 ?...: "default" 如果 elvis 操作符左边( nullableValue )不是 null 的话,整个表达式会将 nullableValue 的值赋值给变量( value )。...安全访问和 elvis 操作符强强组合是 Kotlin 中一个非常强大的惯用组合方式。它允许达到非常简洁地处理 null 空值目的。...特别要注意: 很难读的怪诞表达式(看上面的一节:注意残缺) 复杂的安全访问和 elvis 结构 关于后面那一点让我来给你举几个例子。...特别是刚开始学习 Kotlin 的时候,很容易迷失在复杂的安全引用、 elvis 操作符以及表达式之中。在这种情况下,最好是想想那套陈旧且好用的“如果是空指针或空白”的陈述语句: // 拥抱它!

    1.8K30
    领券