Android 使用Kotlin开发(一)

本文为自己学kotlin时的一些笔记


Kotlin的特色

Kotlin作为Java的改良,在Android开发中有很多优势,我们先从相对直观的界面绘制开始了解,然后看看Kotlin的语法特点,再慢慢去接触更深层次的编程思想。

简化findViewById

我们知道,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引用),我们使用的控件对象,其实是这个虚拟包里的控件对象。

Kotlin的语法特点

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机制来解决这个问题,在懒加载机制里,变量只有在第一次使用时才会初始化,可以这样写

Android 使用Kotlin开发(一)_第1张图片

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 方法名(参数名:类型,参数名:类型…) :返回类型{

}

所以可以这样写

Android 使用Kotlin开发(一)_第2张图片

由于kotlin可以对函数的返回值进行类型推断,所以经常使用“=”代替返回类型和“return”关键字 上面的代码可以写成

Android 使用Kotlin开发(一)_第3张图片

如果我们的函数代码只有一行可以简化成

Android 使用Kotlin开发(一)_第4张图片

函数也可以空指针安全,在返回类型后面加“”即可

Android 使用Kotlin开发(一)_第5张图片

有时候函数的类型为Unit 代表java的void 代表没有返回

Android 使用Kotlin开发(一)_第6张图片

在方法没有返回值时 也可以不写Unit

Android 使用Kotlin开发(一)_第7张图片

8.用is代替了instance of

Android 使用Kotlin开发(一)_第8张图片

9.in 区间 集合
在kotlin中有区间的概念 比如2..8就是2到8的整数区间

Android 使用Kotlin开发(一)_第9张图片

也可以用in判断集合是否包含某个元素
Android 使用Kotlin开发(一)_第10张图片

for循环的使用方法

Android 使用Kotlin开发(一)_第11张图片

可以倒序遍历

Android 使用Kotlin开发(一)_第12张图片

当然也可以反转

Android 使用Kotlin开发(一)_第13张图片

可以指定步长(即每次走多少)

Android 使用Kotlin开发(一)_第14张图片

10.when代替了switch

Android 使用Kotlin开发(一)_第15张图片

11.字符串模板 在java中字符串的可读性较差

MessageFormat.format(“{0}xivehribuher{1}xhvihuehewogweg”,para0,para2);

在字符串比较长时,你不知道字符串要表达什么

在kotlin中字符串可读性更好

Android 使用Kotlin开发(一)_第16张图片

这篇文章就到这里了 在后续的文章中将会对Kotlin的新特性 一 一介绍

在后续的文章中前三篇将会对Kotlin做一个详细的讲解(篇幅会有点大)

之后将会使用Kotlin写几个Android Demo并且会封装一个网络请求库

代码同步GitHub

GitHub

你可能感兴趣的:(Kotlin)