Kotlin作为Java的改良,在Android开发中有很多优势,我们先从相对直观的界面绘制开始了解,然后看看Kotlin的语法特点,再慢慢去接触更深层次的编程思想。
我们知道,Android的架构里,xml布局文件和Activity是松耦合的,Activity中要使用界面元素,必须借助R文件对xml控件的记录,用findViewById找到这个元素。
在Kotlin中我们可继续使用findViewById去绑定xml布局中的控件:(TextView)findViewById(R.id.hello);
进一步引用Anko之后,可以使用find函数去绑定控件:find(R.id.hello),不需要类型转换
同时,Kotlin还提供一种更激进的方法,通过在gradule中引用applyplugin:’kotlin-android-extensions’,彻底取消findViewById这个函数,具体做法如下:
首先,在app的gradule中,添加引用
然后,在Activity中直接根据id使用界面元素
按住Ctrl键,会提示我们这个控件详情
点击后,可以直接跳转到xml文件中的控件位置,光标会停留在Id处
这种特性令人联想起C#语言中对界面控件的管理,在C#里,界面的控件可以直接调用,不需要find,这是因为在创建一个Form1.cs界面文件时,IDE会自动创建一个对应的额Form1.designer.cs类,在这个类里,自动管理所有界面控件的对象。
Kotlin也是类似的思路,它会遍历你的xml文件,创建对应的虚拟包给你引用(用Alt+Enter引用),我们使用的控件对象,其实是这个虚拟包里的控件对象。
1.在kotlin语法里,代码行不需要“;”结尾。
2.重要的 “:”
在java里,:主要在运算符里出现(for switch 三元)
在kotlin中 :的地位大大提升了,他的用途非常广泛
定义变量类型
var name:String=”my name” //变量name为String类型
定义参数的类型
fun makeTool(id:Int){ //参数id为Int类型}
定义函数的返回值
fun getAddr(id:Int):String{ //返回值为String类型}
声明类/接口的继承
class KotlinActivityUI :AnkoComponent{//继承AnkoComponent接口
来使用Java类
val intent = Intent(this, MainActivity::class.java) //需要用::来使用Java类,注意是两个“”
3.没有new
kotlin来实例化一个对象不需要new
var list=ArrayList()
4.变量常量类型推断
用var定义变量
var name:String=”my name”
用val定义常量(相当于final)
val TAG:String=”ClassName”
由于kotin可以类型推断上面的2个例子可以简化成
var name=”my name”
val TAG=”ClassName”
5.初始化和延迟加载
在java里我们可以自己定义一个变量,但是并不赋值(int和boolean会有默认值)
但是kotlin必须为变量赋值,如果只写一个变量 却不赋值 如下
var name
编译器会报错,提示你未初始化,你必须赋值0或者null,或者别的一些值
不过有时候我们并不能在定义变量时就初始化他,比如我们在Android中定义一个view控件,或者预定义一个适配器,我们只有在onCreateView()的时候才初始化
针对这种情况,kotlin提供了懒加载lazy机制来解决这个问题,在懒加载机制里,变量只有在第一次使用时才会初始化,可以这样写
lazy只适用于val对象,对于var对象,需要使用lateinit
6.空指针安全
在kotlin里可以用“?”表示可以为空 用“!!”表示不可以为空
空指针安全并不是不需要处理空指针,你用“?”声明的某个变量时可以为空的
var num:Int?=null
声明允许为空时,不能使用类型推断,必须声明其数据类型
空指针虽然安全了,但是需要视情况而定,有时候可以为空 有时候做数据检查,有时候抛出异常
val v1 =num?.toInt() //不做处理返回 null
val v2 =num?.toInt() ?:0 //判断为空时返回0
val v3 =num!!.toInt() //抛出空指针异常(用“!!”表示不能为空)
7.定义函数
在kotlin中可以这样定义函数
fun 方法名(参数名:类型,参数名:类型…) :返回类型{
}
所以可以这样写
由于kotlin可以对函数的返回值进行类型推断,所以经常使用“=”代替返回类型和“return”关键字 上面的代码可以写成
如果我们的函数代码只有一行可以简化成
函数也可以空指针安全,在返回类型后面加“?”即可
有时候函数的类型为Unit 代表java的void 代表没有返回
在方法没有返回值时 也可以不写Unit
8.用is代替了instance of
9.in 区间 集合
在kotlin中有区间的概念 比如2..8就是2到8的整数区间
for循环的使用方法
可以倒序遍历
当然也可以反转
可以指定步长(即每次走多少)
10.when代替了switch
11.字符串模板 在java中字符串的可读性较差
MessageFormat.format(“{0}xivehribuher{1}xhvihuehewogweg”,para0,para2);
在字符串比较长时,你不知道字符串要表达什么
在kotlin中字符串可读性更好
这篇文章就到这里了 在后续的文章中将会对Kotlin的新特性 一 一介绍
在后续的文章中前三篇将会对Kotlin做一个详细的讲解(篇幅会有点大)
之后将会使用Kotlin写几个Android Demo并且会封装一个网络请求库
代码同步GitHub
GitHub