Kotlin语法-上篇

1.没有“;”

你会发现不用再去写';'了,我还傻傻的去敲,会报错。

2.重要的“:” 功能大大提升

功能1:

定义变量类型:

var name:String="my name" //变量name为String类型

功能2:

定义参数的类型:

fun makeTool(id:Int){ //参数id为Int类型

}

功能3:

定义函数的返回值:

fun getAddr(id:Int):String{ //返回值为String类型

}

功能4:

声明类/接口的继承

class KotlinActivityUI :AnkoComponent<KotlinActivity>{//继承AnkoComponent接口

功能5:

使用Java类

val intent = Intent(this, MainActivity::class.java) //需要用::来使用Java类,注意是两个

3.没有new 啦

3、没有new啦

Kotlin实例化一个对象时不需要new关键字

var list=ArrayList()

4.变量、常量、类型推断

变量var,常量val,可以自动判断的

5.初始化和延迟加载

Kotlin里必须为变量赋值,

如果只写一个变量,却不赋值,像下面这样:var name

编译器会报错,提示你未初始化,你必须赋值为0或者null,或者别的什么值。

不过,我们有时候就是不能在定义变量时就初始化它,

比如在Android中我们经常预定义一个View控件而不初始化,

但是直到onCreate或onCreateView时才初始化它。

针对这种情况,Kotlin提供了懒加载lazy机制来解决这个问题,

在懒加载机制里,变量只有在第一次被调用时,才会初始化,代码需要这样写

private val mt:TextView by lazy{  //这时候不初始化
findViewById(R.id.kt) as TextView
}
override fun onCreate(saveInstanceState:Bundle?){
super().onCreat(saveInstanceState)
setContentView(R.layout.activity_main)
mt.text="abc"  //这里才是
}
但是lazy只适用于val对象,对于var对象,需要使用lateinit,原理是类似的,只是代码需要这样写
lateinit var sname:String
fun initSs(name:String)
sname=name

6.空指针安全

在Kotlin里,可以用“?”表示可以为空,也可以用“!!”表示不可以为空。

空指针安全并不是不需要处理空指针,你需要用“?”声明某个变量是允许空指针的,例如:

var num:Int?=null

声明允许为空时,不能使用类型推断,必须声明其数据类型

空指针虽然安全了,但对空指针的处理还是要视情况而定,有时候不处理,有时候做数据检查,有时候还需要抛出异常,这三种情况可以这样写:

val v1 =num?.toInt() //不做处理返回 null

val v2 =num?.toInt() ?:0 //判断为空时返回0

val v3 =num!!.toInt() //抛出空指针异常(用“!!”表示不能为空

7.定义函数

在Kotlin语法里,定义函数的格式是这样的

fun 方法名(参数名:类型,参数名:类型...) :返回类型{

}

所以,一般来说,函数是这样写的

fun getAddress(id:Int,name:String):String{

    return"got it"

}

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

fun getAddress(id:Int,name:String)={ //用“=”代替return,返回String类型则交给类型推断

     "got it" //return被“=”代替了

}

如果函数内代码只有一行,我们甚至可以去掉{}

fun getAddress(id:Int,name:String)="got it" //去掉了{}

}

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

fun getAddress(id:Int,name:String) :String?="got it"

有时候,函数的返回类型是个Unit,这其实就是Java中的void,表示没有返回

fun addAddress(id:Int,name:String):Unit{ //相当于java的void

}

不过,在函数无返回时,一般不写Unit

fun addAddress(id:Int,name:String){ //相当于java的void

}

8.用is取代了instance of

代码很简单

if(obj is String)...

9.in、区间和集合

Kotlin里有区间的概念,例如1..5表示的就是1-5的整数区间

可以用in判断数字是否在某个区间

if(x in 1..5){ ...//检查x数值是否在1到5区间

可以用in判断集合中是否存在某个元素

if(name in list){...//检查list中是否有某个元素(比Java简洁多了)

可以用in遍历整个集合

for(i in 1..5){ ...//遍历1到5

for(item in list){...//遍历list中的每个元素(相当于Java的for(String item : list))

另外,in在遍历集合时功能相当强大:

在遍历集合时,可以从第N项开始遍历

for(i in 3..list.size-2){...相当于for (int i = 3; i <= list.size()-2; i++)

可以倒序遍历

for(i in list.size downTo 0) {...相当于for (int i = list.size(); i >= 0; i--)

可以反转列表

for(i in (1..5).reversed())

可以指定步长

for(i in 1.0..2.0 step 0.3) //步长0.3

Kotlin里的集合还都自带foreach函数

list.forEach {...

 









posted @ 2018-08-02 17:42  十指流玉  阅读(165)  评论(0)    收藏  举报