Fellow Travellers

Kotlin初探

汪洋
字数统计: 1k阅读时长: 4 min
2018/11/01 Share

Kotlin初探

本文只起抛砖引玉之用,详细教程请谷歌百度

Kotlin 简述

特点与优势

  • 基于JVM的新的编程语言
  • 由JetBrains开发(Java IDE 之父)
  • 谷歌官方宣布使用
  • 易学习,轻量级,函数式编程,语法简洁
  • 100%兼容java

    入手

    从变量开始来了解下Kotlin。

    常量与变量

    编程语言中,我们熟知的常量与变量是最基本的数据形式。

    常量

  • 十进制:123
  • 长整型以大写的 L 结尾:123L
  • 16 进制以 0x 开头:0x0F
  • 2 进制以 0b 开头:0b00001011
  • Doubles 默认写法: 123.5, 123.5e10
  • Floats 使用 f 或者 F 后缀:123.5f

    变量

    可变变量定义:var 关键字

    不可变变量定义:val 关键字,只能赋值一次的变量(类似Java中final修饰的变量)
    常量与变量都可以没有初始化值,但是在引用前必须初始化

编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。

1
2
3
4
5
6
7
8
val a: Int = 1
val b = 1 // 系统自动推断变量类型为Int
val c: Int // 如果不在声明时初始化则必须提供变量类型
c = 1 // 明确赋值


var x = 5 // 系统自动推断变量类型为Int
x += 1 // 变量可修改

Null 检查机制

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理

1
2
3
4
5
6
7
8
//类型后面加?表示可为空
var age: String? = "23"
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1

函数

我们可以看到Kotlin有自动类型检测,但这仅限于一些常规的类型,当一个变量类型是函数的时候,Kotlin把它叫做匿名函数(lambda)

函数定义

函数定义使用关键字 fun,参数格式为:参数 : 类型

1
2
3
fun sum(a: Int, b: Int): Int {   // Int 参数,返回值 Int
return a + b
}

可变长参数函数

函数的变长参数可以用 vararg 关键字进行标识:

1
2
3
4
5
6
7
8
9
10
fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}

// 测试
fun main(args: Array<String>) {
vars(1,2,3,4,5) // 输出12345
}

lambda(匿名函数)

1
2
3
4
5
// 测试
fun main(args: Array<String>) {
val sumLambda: (Int, Int) -> Int = {x,y -> x+y}
println(sumLambda(1,2)) // 输出 3
}

语法糖

糖嘛,好吃就行

当我们以变量来看上面的sumLambda的时候,最后一行的含义不言而喻。任何函数都能看成一个变量,自然都能够作为一个参数传递。

函数传递

max(strings, {a,b -> a.length < b.length})

链式编程

1
2
3
strings.filter{it.length == 5}
.sortedBy{it}
.map{it.toUpperCase()}

区间

区间表达式由具有操作符形式 .. 的 rangeTo 函数辅以 in 和 !in 形成。

区间是为任何可比较类型定义的,但对于整型原生类型,它有一个优化的实现。以下是使用区间的一些示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
for (i in 1..4) print(i) // 输出“1234”

for (i in 4..1) print(i) // 什么都不输出

if (i in 1..10) { // 等同于 1 <= i && i <= 10
println(i)
}

// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出“13”

for (i in 4 downTo 1 step 2) print(i) // 输出“42”


// 使用 until 函数排除结束元素
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}

Kotlin 实践

Kotlin当然还有很多新的特性:泛型,对象表达式,匿名内部类等。可以参考博客中的Kotlin实践篇。本文不再详谈。

总结

Kotlin基于JVM开发,所以它适用于很多平台:服务端,安卓,JavaScript,原生,协成。

语言只是工具。锋利的新刀与顺手的老刀,看你选择了。

CATALOG
  1. 1. Kotlin初探
    1. 1.1. Kotlin 简述
      1. 1.1.1. 特点与优势
    2. 1.2. 入手
      1. 1.2.1. 常量与变量
        1. 1.2.1.1. 常量
        2. 1.2.1.2. 变量
      2. 1.2.2. Null 检查机制
      3. 1.2.3. 函数
        1. 1.2.3.1. 函数定义
        2. 1.2.3.2. 可变长参数函数
        3. 1.2.3.3. lambda(匿名函数)
      4. 1.2.4. 语法糖
        1. 1.2.4.1. 函数传递
        2. 1.2.4.2. 链式编程
        3. 1.2.4.3. 区间
    3. 1.3. Kotlin 实践
    4. 1.4. 总结