前言
写在前面的一些感悟,最近花两个星期的时候,熟读了kotlin官网的中文文档,虽然只能掌握个50%,但也能体会到kotlin带个开发者的便利,非常强大了。
一。空安全
空安全是kotlin的精髓之一。很多情况下大家都会遇到这样一种情况,考虑到调用对象mFragment可能为空,在使用前,严谨的程序员小哥哥会做判空处理,不为空在使用。看上去貌似没毛病啊。
private List<Fragment> mFragment;
if (mFragment != null) {
mFragment.get(0);
}
可是翻译成kotlin代码呢?
val mFragment: List<Fragment>? = null
mFragment?.get(0)
看上去貌似别多大的变化,其实变化很大。
1.没有分号了!(this is a joke)
2.List<Fragment>?的这个问号代表的含义是,mFragment允许是一个空对象的可能性。
3.mFragment?的这个问号代表的含义是,当mFragment不为空,才执行后面的get(0)的代码。重点是如果你不加这个问号,编译器会用标准的英文告诉你“Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type List<Fragment>?”。
这就意味着即使你不是一个严谨的程序员小哥哥,严谨的kotlin依旧可以守护你的代码!
二。善变的var和忠贞的val
在kotln的世界里面,所有的对象被划分成两种人,一种是善变的,一种是忠贞的。在声明的时候,都是以var或者val开头的。举个简单的例子。
var a= "我是善变的"
val b= "我是忠贞的"
于是乎,当a b想要改变时,a成功了,b失败了。编译器用标准的英文告诉你“Val cannot be reassigned”。
是的没错,严谨的kotlin又再一次守护你了你的代码。
三。告别页面view的绑定。
常见的view绑定有一下两种。
@BindView(R.id.tb_title)
LtTabLayout tbTitle;
@BindView(R.id.vpProducts)
ViewPager vpProducts;
tbTitle = findViewById(R.id.tb_title);
vpProducts = findViewById(R.id.vpProducts);
但在kotlin的世界里面,你只需要import一下,像这样
import kotlinx.android.synthetic.main.activity_brand_detail.*
接下来你只需要自由的使用页面布局里面id,就可以轻松调用对应的view了。没错,就是这么方便,告别了大量的代码。