kotlin-stdlib

恕我直言,Kotlin并不是主要的杀手级功能-虽然可以肯定地将扩展方法和属性归类为此类功能,但是可以带来许多深远影响的小改进。 它们大多数不是语言内置的,而是作为Kotlin标准库的一部分提供的功能。 在本文中,我想介绍其中的一小部分,并描述如何使用它们来改进代码。<!-more-→

去做()

在新的代码库中具有//TODO注释是很常见的。 对于我们大多数开发人员来说,这甚至可能是一种反思。 当流程进入时,不要因为缺乏规范而停下来,而是写下一个提醒以备稍后使用。 以后意味着什么。 即使是IDE,也很乐意生成带有此类注释的代码。

funcomputeCustomerNumber(customer:Customer):String{// TODO Not specified as of November 27th
}

但是,在运行实际代码时不会发生任何问题。 什么都没有发生,没有什么真正提醒我们应该实施这一部分。 当然,某些代码分析工具可能会发现它,但是可能已经为时已晚。 并且它要求该工具实际运行。

Kotlin提供了TODO()函数,该函数在调用时实际上会引发异常。 这样,即使运行简单的单元测试,也会强行将您指向一个事实,那就是那里有事要做。

funcomputeCustomerNumber(customer:Customer):String{TODO("Not specified as of November 27th")
}

应用()

根据API的具体细节,构造一些对象可能非常繁琐,并且涉及许多细节。 为了隐藏这些细节,当前的共识通常是从中创建一种方法。 这是为Vaadin Web框架创建组合框组件的代码段:

funcreateCountriesCombo():ComboBox<String>{valcountries=ComboBox<String>("Countries")countries.setItems("Switzerland","France","Germany","Austria")countries.isEmptySelectionAllowed=falsecountries.placeholder="Choose your country"countries.addValueChangeListener{valcountry=countries.valuebus.post(CountryChangeEvent(country))}returncountries
}

即使这样,根据要设置的属性的数量,也很容易迷失细节。 apply()是一个简单的函数,定义为:

fun<T>T.apply(block:T.()->Unit):T{block();returnthis}

这意味着可以在任何类型T上调用此函数,并且它的唯一参数是lambda接收器,该接收器不返回任何内容。 至于任何拉姆达接收机, this内部拉姆达指函数被调用的对象。 这使我们可以将以上代码片段重构为以下内容:

funcreateCountriesCombo():ComboBox<String>{valcountries=ComboBox<String>("Country").apply{setItems("Switzerland","France","Germany","Austria")isEmptySelectionAllowed=falseplaceholder="Choose your country"addValueChangeListener{bus.post(CountryChangeEvent(value))}}
}

更好的是,现在可以轻松地重构代码片段以利用表达式主体:

funcreateCountriesCombo()=ComboBox<String>("Country").apply{setItems("Switzerland","France","Germany","Austria")isEmptySelectionAllowed=falseplaceholder="Choose your country"addValueChangeListener{bus.post(CountryChangeEvent(value))}
}

锦上添花,如果有任何IDE值得加入,可以使用折叠显示概览,然后展开以显示细节。

用()

在Java 7之前,必须在finally块中显式完成关闭连接的操作:

Connectionconn=getConnection();
try{// Do stuff with the connection
}finally{if(conn!=null){conn.close();}
}

Java 7添加了try-with-resource语法 。 例如,上一个代码段可以重构为以下代码段:

try(Connectionconn=getConnection()){// Do stuff with the connection
}

使用资源进行尝试的语法大大简化了代码。 但是,它是语言语法的一部分,因此具有很多隐含性:

  • 资源语句中的类型必须实现AutoCloseable
  • 在同一条语句中可以打开多个资源。 在这种情况下,它们以打开时的相反顺序关闭。
  • 如果在try块中以及在资源关闭期间引发了异常,则资源将被抑制并设置为主要异常。

Kotlin对应项通过use函数处理,其签名为:

fun<T:Closeable,R>T.use(block:(T)->R):R

不涉及黑魔法。 这是一个简单的功能,其源代码可在线获得 。

结论

这些仅是可用示例。 通常,语言的语法可以在21天(甚至更少)内学习。 但是,了解该API需要花费更多时间。

Kotlin不太关注语法,而更关注API。

更进一步:

  • 在所有受支持的平台上可用的核心功能
  • Kotlin标准库
  • 探索Kotlin标准库

翻译自: https://blog.frankel.ch/make-life-easier-kotlin-stdlib/

kotlin-stdlib

kotlin-stdlib_使用Kotlin stdlib使您的生活更轻松相关推荐

  1. css规则_CSS规则,将使您的生活更轻松

    css规则 by Nick Gard 尼克·加德(Nick Gard) CSS规则,将使您的生活更轻松 (CSS rules that will make your life easier) Afte ...

  2. 垃圾收集 java_Java的内置垃圾收集如何使您的生活更美好(大部分时间)

    垃圾收集 java 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! "无需为用户编写将寄存器返回到自由存储列表的程序." ...

  3. Java的内置垃圾收集如何使您的生活更美好(大部分时间)

    通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控. 参加AppDynamics APM导览! "无需为用户编写将寄存器返回到自由存储列表的程序." 该行(以及随后的十 ...

  4. alwayson高可用组_AlwaysOn可用性组–好奇心使您的工作更轻松–第4部分

    alwayson高可用组 Here we are with the last part of this series of articles! In this article we are going ...

  5. alwayson高可用组_AlwaysOn可用性组–好奇心使您的工作更轻松–第2部分

    alwayson高可用组 In continuation to the previous article, where we talked about what happens when I add ...

  6. drupal主题开发_Drupal开发人员,关于如何使您的网站更易于访问

    drupal主题开发 对于OpenConcept Consulting Inc.的创始人兼总裁开放源代码开发人员Mike Gifford ,在他的名字后面提到Drupal可访问性是多余的. 他花了十年 ...

  7. 【刚好遇见Kotlin】使用Kotlin开发——搭建Kotlin 编译环境

    使用Kotlin开发--搭建Kotlin 编译环境 这篇博文主要帮助大家搭建Kotlin的开发环境. Hello world 当我们准备kotlin的第一个程序HelloWorld时,我们首先要去下载 ...

  8. kotlin android 4,Kotlin Android Extensions: 与 findViewById 说再见 (KAD 04)

    时间:Aug 16, 2017 原文链接:https://antonioleiva.com/kotlin-android-extensions/ 在 Kotlin1.1.4版本 发布后,原作者依据 K ...

  9. android kotlin面试题,Kotlin面试25题

    大家好,这一期呢,我们谈一下kotlin的面试题. 第1题,什么是kotlin? kotlin是静态类型的编程语言,运行于jvm之上. 第2题, 是谁开发了kotlin? kotlin是由jetbra ...

最新文章

  1. 一文盘点MWC 2019所有5G设备和研发进展
  2. uploadify 上传文件并带有随机数文件名生成
  3. SQL Server日期格式的转换
  4. ElasticSearch学习总结(三):查询总结
  5. 从零开始的51单片机——VsCode+EIDE环境搭建
  6. WebForms 开发基础
  7. c# 中的as,is
  8. uboot启动第二阶段——start_armboot
  9. linux转码软件下载,格式工厂linux版
  10. C语言算术运算符介绍和示例
  11. java socket5源码_Java利用TCP协议实现客户端与服务器通信【附通信源码】
  12. 注册事件的两种方式(传统注册事件、方法监听注册事件)
  13. 成功创业者培养的四个习惯
  14. 2022年深圳有哪些好玩的小镇古城推荐
  15. matlab 正版下载,matlab软件正版
  16. html js获取本地ip,在js获取本地IP地址
  17. 反走样知识简单分享-计算机图形学
  18. “掌上运维” – 下一代网管的思考
  19. 应用程序正常初始化 0xc015002 失败
  20. 宋朝名画“虎戴VR”,在外网火了

热门文章

  1. 计算机类审稿快的中文期刊,审稿快的中文期刊_土木审稿快的期刊_最容易发表审稿快的学报...
  2. Goland Unresolved dependency问题解决
  3. 专业 DAW 音频插件:Voxengo Plug-ins Bundle for Mac(Voxengo系列音频插件合集)
  4. SAP GUI750快捷键保存密码
  5. Java BigDecimal类的一般使用、BigDecimal转double
  6. mac编码查看及修改
  7. RHCSA(红帽系统认证管理员)/Linux虚拟机 基础 Day1
  8. 0521 HTML基础
  9. android网络 gps定位失败,android 网络定位失败 location为null的真正原因
  10. 通讯行业多媒体信息发布系统方案