开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散
语法糖会导致分号的悲剧。—— Alan J. Perlis
我们赓续地掉去一些器械。个一一些器械相对来说会更重要,如今从新拣起来还不算太晚。Kotlin 说话为法度榜样员的生活带来了大年夜量新的概念和特点,它们在日常开辟中应用起来会很艰苦。我在临盆情况中应用了两年 Kotlin 之后,才感触感染到它带来的快活和知足。这是怎么产生的?原因就在那些小小的语法糖中。
我会在本文中与你分析我最爱好的 Kotlin 语法糖,它们是在我须要写简洁而鲁棒 Android 应用法度榜样组件时发明的。为了让这篇文┞仿读起来更轻松,我把它分成三个部分。在这第一部分中,你会看到密封类和 when() 控制流函数。高兴的开端吧!
拥抱“模式匹配”的密封类
比来我的工作中有机会应用 Swift。我不仅要审核代码,还要将个一一些组件翻译成 Kotlin 实现。我读的代码越多,就越认为惊奇。最对我来说,最吸惹人的特点是列举。可惜 Kotlin 的列举并不太灵活,我不得不发掘合适的替代品: 密封类 。
密封类在编程界并不是什么新鲜玩意儿。事实上,密封类是一个异常有名的说话概念。Kotlin 惹人了 sealed 关键字,它可用于类声明,表示对类层次构造的限制。某个值可所以有限类型中的一个,但它不克不及是其它类型。简单地说,你可以应用密封类来代替列举,甚至做更多工作。
来看看下面的示例代码。
- fun sugar(response: Response) = when (response) {
- is Success -> println(response.body)
- is Error -> println("${response.code} ${response.message}")
- Timeout -> println(response.javaClass.simpleName)
- }
- sealed class Response
- data class Success(val body: String): Response()
- data class Error(val code: Int, val message: String): Response()
- object Timeout: Response()
乍一看,这些代码除只是声清楚明了一些简单的持续关系,但步步深刻,就会提示一个谅人的┞锋相。为 Response 类添加的 sealed 关键字到底起到了什么感化呢?提示这个问题最好的办法是应用 IntelliJ IDEA Kotlin Bytecode 对象。
enum class Employee 描述了在公司 XYZ 中可以找到的所有角色, enum class Contract 包含所有类型的雇佣合同。 基于这两个 enums ,你应当返回一个精确的 SafariBookAccess 。 并且,你的函数必须产生给定 enum 的所有分列的状况。 第一步,我们来创建状况生成函数的签名。
第一 步。查看 Kotlin 字节码 (Kotlin Bytecode)
第二步。将 Kotlin 字节码反编译成 Java 代码
经由如许异常简单地翻译,你可以看到 Kotlin 代码对应的 Java 代码出现。
- public abstract class Response {
- private Response() {
- }
- // $FF: synthetic method
- public Response(DefaultConstructorMarker $constructor_marker) {
- this();
- }
- }
你可能已经猜到了,密封类专们用于持续,所以它们是抽象的。不过他们变得与列举类似的?在这里,Kotlin 编译器做了大年夜量的工作,让你可以在 when() 函数中将 Response 的子类用作分支。此外,Kotlin 供给了很大年夜的灵活性来许可对密封类的持续构造可以被算作数据声明甚至对象来应用。
- fun sugar(response: Response) =
推荐阅读
开辟者大年夜赛路演 | 12月16日,技巧立异,北京不见不散 登录网站时必须输入的图片验证码可以用来辨认拜访者到底是人照样机械——这同时也是某种程度上的「图灵测试」,人工智能>>>详细阅读
本文标题:6个能让你的Kotlin代码库更有意思的“魔法糖”
地址:http://www.17bianji.com/lsqh/39802.html
1/2 1