今天开始学习Kotlin,应该两到三个月内完成基础的Kolin学习。

Android Studio环境搭建

IDEA是Kotlin的一等支持编译器,但是Android程序员还是更喜欢使用Android Studio来编写demo。
​​​Android Studio3.0​​以上内置了Kotlin原生支持,所以之后的学习的编译环境都是在Android Studio上。

在AndroidStudio创建工程的时候,使用下面选项:

Kotlin学习(1)初识及环境搭建_string类


创建工程后,因为非国内的jcent下载kotlin包会很慢,可能会出现​​Could not download kotlin-gradle-plugin.jar​​的错误,所以在 build.gradle下将jecent替换:

Kotlin学习(1)初识及环境搭建_java_02


然后,环境算是搭建好了。点个锤子+运行:

Kotlin学习(1)初识及环境搭建_java_03

初始Kotlin语言

Kotlin现在是Android开发的一种趋势,其在Android的使用的比重使用是越来越大,虽然现在和Java比还是28开(前几年是19开),但既然是趋势,那我们就有必要学习并加入到武器库中,就跟AndroidX一样。

Kotlin为什么会成为一种趋势,那它肯定有许多Java不及的优点,下面我列举几个其特性:

  • 和Java及JVM的互操作性,即可以无缝使用各种Java Api框架库
  • 多平台:适用于Android、JS、本地系统编程(Native)
  • 语法简洁(就是比较好学)
  • 支持类型推断( Java中要写 int/float ,Kotlin 中只用写 val,编译器就会帮你推断类型)
  • 区分可空类型和不可空类型(这对于一个经常忘记判空的Java程序员来说非常的友好= =)
  • 集成了 文件I/O、正则匹配、线程等工具类
  • ​Anko库​​使得Android开发速度更快

总的来说可以概括为:

  1. 实用
  2. 极简
  3. 多范式
  4. 可扩展
    Kotlin可以直接扩展函数与属性。(还记得装饰模式吗)
  5. 高阶函数与闭包
  6. 支持快速实现DSL
  7. 空安全

Kotlin与Java的互操作性

给出下面一段代码:

//fun是函数关键字,后面跟的是函数名, 冒号后面是 返回类型
fun getList() : List<String> {
//直接使用了 ArrayList这个Java的Api
val arrayList = ArrayList<String>()
arrayList.add("A")
arrayList.add("B")
arrayList.add("C")
return arrayList
}
...
println(getList())

打印结果:

I/System.out: [A, B, C]

从上面可以看出

  • Kotlin可以直接使用Java的Api
  • Kotlin语句不用写 逗号
  • 使用​​val​​ 声明了一个 ArrayList的对象

扩展函数与扩展属性

可以在不修改原来类的条件下自定义函数和属性,使得它们的表现就像是属于这个类一样
例如,我们给String类型扩展一个返回字符串首字母的 ​​​getFirstChar()​​的函数:

//直接String后面加个.然后 写出该函数
fun String.getFristChar(): String {
//this表示调用者对象
if (this.isEmpty()) {
return ""
}
//返回下标为0的字符并转成String类型
return this[0].toString()
}
...
Log.d(TAG, "abc".getFristChar())

打印结果:

D/MainActivity:

不可空类型与空安全

Koltlin中引入了不可空类型与可空类型来明确声明一个变量是否可能为null
同时在编译期通过类型是否匹配来检查空指针异常,大大降低了空指针异常出现的概率。
同时Kotlin还提供了 ​​​Elvis操作符​​​,​​安全调用符​​ 等极简的语法格式来判空

比如下面的代码:

Kotlin学习(1)初识及环境搭建_java_04


当我们声明了一个字符串,系统会默认推断 a 为 不可空的String,所以我们之后再给a赋值为null,编译器会直接报错

如果这个时候我们想声明一个可空的String类型,就这样写:

//声明一个可空的String类型   [名称]:[类型]? 
var b:String? = "aaa"

在声明一个可空类型后,一些方法就不能调用了,比如:

Kotlin学习(1)初识及环境搭建_java_05


不能使用String的方法,必须要调用 ​​(?.)​​​或者 ​​(!!.)​​才可以,就是下面这样:

: String? = "abc"
println(b?.length)
b = null
print(b?.length)

输出结果为:

3

一等函数支持

可以把函数像值一样进行传递
这个特性太顶,以后慢慢讲。