当前位置:   article > 正文

kotlin-stdlib_使用Kotlin stdlib使您的生活更轻松

kotlin-stdlib

kotlin-stdlib

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

去做()

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

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

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

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

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

应用()

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

  1. funcreateCountriesCombo():ComboBox<String>{
  2. valcountries=ComboBox<String>("Countries")
  3. countries.setItems("Switzerland","France","Germany","Austria")
  4. countries.isEmptySelectionAllowed=false
  5. countries.placeholder="Choose your country"
  6. countries.addValueChangeListener{
  7. valcountry=countries.value
  8. bus.post(CountryChangeEvent(country))
  9. }
  10. returncountries
  11. }

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

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

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

  1. funcreateCountriesCombo():ComboBox<String>{
  2. valcountries=ComboBox<String>("Country").apply{
  3. setItems("Switzerland","France","Germany","Austria")
  4. isEmptySelectionAllowed=false
  5. placeholder="Choose your country"
  6. addValueChangeListener{
  7. bus.post(CountryChangeEvent(value))
  8. }
  9. }
  10. }

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

  1. funcreateCountriesCombo()=ComboBox<String>("Country").apply{
  2. setItems("Switzerland","France","Germany","Austria")
  3. isEmptySelectionAllowed=false
  4. placeholder="Choose your country"
  5. addValueChangeListener{
  6. bus.post(CountryChangeEvent(value))
  7. }
  8. }

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

IDE展开的应用功能

IDE折叠的套用功能

用()

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

  1. Connectionconn=getConnection();
  2. try{
  3. // Do stuff with the connection
  4. }finally{
  5. if(conn!=null){
  6. conn.close();
  7. }
  8. }

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

  1. try(Connectionconn=getConnection()){
  2. // Do stuff with the connection
  3. }

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

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

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

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

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

结论

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

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

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

kotlin-stdlib

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/223374
推荐阅读
相关标签
  

闽ICP备14008679号