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>基本数据类型(左图)和运算符(右图) ,
一看有点像java中的数据类型,看似相同,但也并不是完全一样,如java中的int可以隐式转换为long型,在kotlin中,较小类型不能隐式的转换为较大的类型,需要通过显示转换。因此提供为每个数据类型提供了如下的转换:
接下来看看代码就一目了然了,下面代码都是在androidstudio上呈现的。 编译器直接提示类型不匹配
正确转换如下:
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项目来总结,这样会更通俗易懂。