Kotlin代码优雅之道

去年的谷歌IO大会上,谷歌宣布将Kotlin作为安卓的官方开发语言,Kotlin开始跨入码农的视野,人们开始学习Kotlin,用来代替Java实现更灵活的开发。Kotlin更便捷先进的语法比之于苹果IOS平台,有称之为安卓的Swift语言。在本文中,虫虫会介绍一些在安卓开发中可能用到的技巧(代码),帮你优化代码,让代码更简洁、明了,易于维护。

记录日志更优雅

在安卓中如果要添加日志日志,通常是下面这样的写法

上述代码,首先声明一个TAG,它只是现有类的类名。写法比较凌乱,不好看清楚。

通过在Kotlin添加优化扩展,更优雅的写法是:

该写法更易使用,更易读。不需要显式声明TAG变量(默认情况下,TAG为类名,比如本例的MainActivity)。如果要个性化TAG,可以自主指定:(

logInfo("doSomething execution started, "CClog_TAG")

为了支持以上写法,你只需给Kotlin添加扩展代码:

共享引用优化

通常在安卓中,如果你想在应用启动期间保留一些小数据,可以使用下面的共享引用(SharedPreferences):

但是,你还需要给每一个这样的数据类notificationCounter,clickCounter 等等编写2个新方法(get和set),还要将密钥存储在新的常量文件中。优化的写法:

在码农界的共识是不必在Constants文件中声明任何更多方法或任何key。而用变通方法(使用的方法),上述变量则由共享引用支持。 默认key键由snake case转换的变量名(上面代码中的SHP_Notification_Count,SHP是静态前缀)。如果你想要明确的key的使用:

var notificationCount: IntbyDelegateSharedPref("My_Key",0)

要实现该效果,复制如下代码段到你项目中:

场景转化和动画延迟

我们在安卓中做的最常见的事情是让视图转化,让其消失,然后变为可见(主要是缩放动画)。此外,在某些情况下,我们希望对开场动画做延迟处理,例如2秒后才展示。则可以用apply函数。其语法大概如下:

anyView.setGone() // 场景不显示

anyView.setGone(true) // 场景动画默认不显示

anyView.setGone(true, ViewAnimationProperties().apply { startDelayMillis = 2000 }) // 延迟动画2s

anyView?.setVisible(true, ViewAnimationProperties().apply { startDelayMillis = 2000; durationMills = 3000}) //开始延迟2ms,播放间隔延迟3s

anyView.setGone()//将在没有动画的情况下消失

anyView.setGone(true)//使用默认缩放动画使视图消失

anyView.setGone(true,ViewAnimationProperties()。apply )//使用startDelay为2秒使视图消失

anyView?.setVisible(true,ViewAnimationProperties()。apply )//开始延迟加上持续时间

将以下代码添加到项目中:

内部数据传输

在Kotlin中开始Activity的一般方法是如下代码:

val intent = Intent(context, MainActivity::class.java)

intent.putExtra("first_key", "firstValue")

intent.putExtra("second_key", 2)

intent.putExtra("third_key", 3.0f)

context.startActivity(intent)

使用代码扩展,写法将如下:

startActivityWithData( "first_key" to "firstValue" , "second_key" to 2 , "third_key" to 3.0f)

startActivityWithData()

非常简易直白。我们使用Inline和Reified类型扩展了这种效果。

下面是实现代码:

Kotlin提供了更灵活的语法和功能,如果我们善用这些特性可以优化我们的开发,让我们的代码更加优雅直白,易于使用易于排查。虫虫在此抛出该文,以馈大家。

本文所有例子和代码,如有需要请关注虫虫,向虫虫所求。如果你有更好的想法和代码,也可以回复留言。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181114A0XC4400?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券