• kotlin的简介
  • kotlin基础
  • 基本数据类型
  • 运算符
  • 数组
  • kotlin中的控制流

1. kotlin的简介

随着Google I/0 2017的结束,Kotlin已经成为热搜。耐不住自己内心的寂寞,于是开始了Kotlin的“入坑之路”。Kotlin 是⼀门针对 JVM、Android、JavaScript 以及原⽣平台的开源(OSS)静态类型编程语⾔。它是由 JetBrains 开发的。该项⽬开始于 2010 年并且很早就已开源。Kotlin 既具有⾯向对象⼜具有函数式结构。

2.kotlin基础

AndroidStudio中kotlin的配置
在AS中的配置大家可以打开上面的链接,上面是kotlin官网中文翻译,包含了在各个平台的教程。刚开始了解kotlin,这次先记录下kotlin的基础知识。

<1>基本数据类型(左图)和运算符(右图)

kotlin Android版本 kotlin ios_Kotlin

kotlin Android版本 kotlin ios_java_02

一看有点像java中的数据类型,看似相同,但也并不是完全一样,如java中的int可以隐式转换为long型,在kotlin中,较小类型不能隐式的转换为较大的类型,需要通过显示转换。因此提供为每个数据类型提供了如下的转换:

kotlin Android版本 kotlin ios_kotlin_03

接下来看看代码就一目了然了,下面代码都是在androidstudio上呈现的。
编译器直接提示类型不匹配

kotlin Android版本 kotlin ios_Kotlin_04

正确转换如下:

val a: Byte = 1
val b: Int =a.toInt()

val与java中的final相似。kotlin中用val声明的 Element表示只读,而var表示既可读,又可写。换言之,前者只有getter();后者包含getter()和setter()。

字符串模板表达式
字符串可以用模板表达式,以下代码为例,输出s为 i=10。

val i = 10  //以"="后面的值决定数据类型,i为Int型
val s = "i = $i"

其中$后面也可以用花括号括起来的任意表达式,如下图:

val s = "123456789"   //s为string类型
val l = "s.length is ${s.length}"

输出结果:


原生字符串,用三个引号(“”“)括起来,其内部没有转义,可以包含换行和任何其它字符:

val text = """
for (c in "foo")
print(c)
"""

trimMargin() 函数去除前导空格:

val text = """
|Tell me and I forget.
|Teach me and I remember.
|Involve me and I learn.
|(Benjamin Franklin)
""".trimMargin()

数组
数组在kotlin中用Array表示,它定义了get()和set()、size等属性。

//数组的创建,使用库函数arrayOf创建
var mArray = arrayOf(1,2,3)

//创建一个Array<String> ,初始化为[0,1,4,9,16]
val strArray=Array(5,{ i->(i*i).toString() })

Kotlin 表⽰原⽣类型数组: ByteArray 、ShortArray 、IntArray 等等
注意: 与 Java 不同的是,Kotlin 中数组是不型变的(invariant)。这意味着 Kotlin 不让我们把 Array 赋值给 Array ,以防⽌可能的运
⾏时失败

<2>kotlin中的控制流

if表达式

var value: Int =0
//传统方式
if (a>b) value=a

//和else搭配
if (a>b){
    value=a
 }
 else{
     value=b
}  

//表达式
 var m = if (a>b) a else b

在表达式的分支中可以是代码块,最后的表达式作为该块的值:

val max = if (a > b) {
    print("Choose a")
    a
} else {
    print("Choose b")
    b
}

When表达式
when取代了java中的switch操作符,这个更改可谓让人省心了不少 =_=
如何让人省心的,来瞧瞧~~~

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
else -> {  // 注意这个块
    print("x is neither 1 nor 2")
    }
}

when将它的参数和每一个分支条件顺序比较,它既可以是表达式,又可以使语句,作为表达式时,符合分支条件的值为表达式的值;作为语句,则忽略个别分支。但when用作表示式时,必须要与else搭配使用。

注:分支条件可以是任意的表达式,而不仅仅限于常量

fun whenFunction(i: Any)= when(i){
            rangeTest(i)-> println("rangeTest")
            1 -> println("i is 1")
            is string ->println("i is string")
            "d"-> println("i is d")
            in 2..10 -> println("i is in range")
            else -> println("i is null")
        }

上述代码中,满足某个分支条件时,该分支条件后面的输出值为该表达式的值。
在when不提供参数的情况,可以取代if —else ,if链,所有的分支条件都是最简单的布尔表达式。

for循环

for循环列举几种方式,其余的大家可以在上面给出的官网中文翻译中查看

//遍历一个List
for(item in List){
    println(item)
}

//遍历一个数据的下标
for(i in array.indices){
    println(array[i])
}

//下面括号内与java中(int i;i<=10;i++)相似
for(i in 1..10 ){
    println("i=$i")
}

for(i int 1 until 10){
    println("不包括10")
}

//每循环一次i=i+3,超出[1,10]区间则停止。
for(i in 1..10 step 3){
    println("i=$i")
}

while循环就不在写了,和java,c++中的类似。

kotlin的基础在这先结束,文章中只是示例了两三个数据类型而已,由于名字和java类似,就不一一介绍,但要注意在声明和使用中与java是有所不同的。后面对与kotlin的类和对象的,接口的理解,将会结合Android项目来总结,这样会更通俗易懂。