Kotlin使用简单总结

自从看到谷歌在Google I/O2017开发者大会上,将kotlin作为android的官方开发语言后,kotlin的曝光率真的是越来越高了,作为一枚小小的android开发者,真的是已经到了不能忽略kotlin的底部了,于是决定简单的学学kotlin语言,然后就来写android项目了,所以这里的简单总结,真的是很简单。

1、kotlin使用知识总结

由于kotlin作为一门独立的语言,肯定不是一篇博客就能够讲清楚的,这里只是简单点额来总结总结,希望看完这篇文章后,能够对kotlin使用有一个大致的认识。

1.1、变量定义

var name: String? = null

代码中var表示name是一个变量,“:”后的String来定义变量name数据类型是String,“?”表示变量name是可以为空的,最后=null将变量初始化为一个空字符串。这里提示下kotlin中不需要分号来分割语句,换行就标示语句的结束(当然现在写分号也不会报错)。

1.2、常量定义

val name: String = "yoryky"

这里可以看出,常量定义使用val关键字来定义,定义格式和变量定义基本相同,但是由于常量可以根据值来推断数据类型,所以常量的定义可以省略数据类型。

val name = "yoryky"

1.3、函数定义

fun funName(param1:String,param2: Int):String{

}

通过fun关键字来来声明funName是一个方法,()中添加方法的参数,:Stirng表示方法返回String类型字符串。

kotlin中的构造函数和java构造函数很大不同,构造函数的使用这里用下面的图来说明

这里写图片描述

kotlin中的构造函数分为主构造函数以及次构造函数,主构造函数只有一个,次构造函数可以多个,图中的主构造函数表现为MainPresenterImpl括号中的内容,实际上是下面代码的缩写

class MainPresenterImpl public constructor(name:String): MainPresenter

次构造函数必须继承主构造函数,这个在上图中有说明,主构造函数和次构造函数都是以constructor关键字来标示。

注意到这里还有一个init关键字,其中可进行一些基于主构造函数参数的初始化操作(主构造函数体中不能包含任何代码),如这里的赋值操作。

1.4、类的属性

kotlin中声明好属性后,不需要去实现对应的get/set方法,在类的实例中也是通过instance.propertyName的方式来获取属性值(虽然实际上还是通过get/set方法获取的,但是这个我们不用管)。

class User {
    var name: String? = null;
    var age: Int? = null;
}

定义对象以及其属性,注意这里没有定义get/set方法

var user = User();
user.name = "yoryky"
user.age = 12
var age = user.age
print("name:${user.name}")
print("age:$age")

使用时,可以看到也是直接操作对象的属性,这里用到 符号可以直接将变量嵌入和字符串中,简单的变量直接使用 使 {}将变量嵌入到字符串中。

1.5、条件语句

kotlin中if/else的使用方式同java保持一致,但是用when替代了switch语句。when比switch语句强大的多
,它不仅可以接受变量、常量、表达式等作为参数。

var result:String? = "yoryky"
when(result){
    "kobe" -> println("输入的是kobe")
    "james"-> println("输入的是james")
    "yoryky"-> println("输入的是yoryky")
}

这里只是列举了when的一个简单用法,when的用法很灵活,感兴趣的同学可以看看这篇文章Kotlin中when表达式的使用:超强的switch(KAD 13)

1.6、循环语句

kotlin中还是使用while/do while语句,这和java中的使用方法基本一致,但是for语句的使用有了很大改变,类似于c#中的foreach方法

var list: ArrayList<String> = ArrayList()
list.add("item1")
list.add("item2")
for (item in list){
    println(item)
}

这里列举的也就是for语句的一种基本用法,for语句还有很多的花式用法,感兴趣的童鞋可以去五分钟学会 Kotlin 语法这篇文章看看。

1.7、冒号的使用

前面其实有不少地方用到了冒号,在kotlin语法中,冒号可以说是作用很大的

常量变量类型声明、函数返回类型、类的继承都需要使用冒号,除此之外使用java类时也需要使用冒号,如下面android开发者很熟悉的代码

var intentInstance:Intent = Intent(this,MainActivity::class.java)

由于实例化类型确定,上面代码可以简化为

var intentInstance = Intent(this,MainActivity::class.java)

1.8、@符号的使用

@符号在kotlin中作用也很大,因为kotlin中经常使用内部匿名类,lambda表达式等

class User {
    inner class State{
        fun getUser(): User{
            //返回User
            return this@User
        }
        fun getState(): State{
            //返回State
            return this@State
        }
    }
}

这里举了一个内部类的例子,this后跟@符号标明this指定的数据类型,实际上java中也存在内部类的情况,但是可以在内部类中返回具体的对象实例来解决这个问题,这里使用了this结合@符号的方式,现在还不知道这种方式有什么好处,总之先记着有这种用法吧。

viewInstance.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
    Log.e("tag", "keyCode$keyCode, ${event.keyCode}")
    if (event.keyCode == KeyEvent.KEYCODE_BACK){
        return@OnKeyListener true
    }else{
        return@OnKeyListener false
    }
})

这个例子说明了kotlin中lambda表达式中的return@的用法,指明返回值是返回到OnKeyListener内部方法,根据java对应代码

view.setOnKeyListener(new View.OnKeyListener() {
    @Override
    public boolean onKey(View v, int keyCode, KeyEvent event) {
        return true;
    }
});

这里实际上是返回OnKeyListener的onKey方法的返回值。

1.9、代码书写简化

上面举了协议例子,可能细心的童鞋都能够看到kotlin代码书写比java简化了不少,目前我是发现了三点代码简化的方式。

a、不使用new关键字

我想这个代码书写简化本来应该放在前面一点讲的,不然很多童鞋肯定看前面的代码,在实例化对象的时候都没哟使用new关键字,真可能一头雾水。但是由于本人太懒,不想重复举例,所以就放到这里了,我们只需要知道kotlin语法中在实例化对象时不需要使用new关键字就行了。

b、省略掉了语句结尾的”;”

kotlin中省略掉分号而用换行表示代码结尾,也不知道是好是坏,反正我现在写kotlin的时候,现在还是爱不由的一行代码结束时打上分号表示结尾,也不会提示错误,但是最好还是不要写分号了吧。

c、使用lambda表达式

lambda表达式是一种在多种语言中都有使用的代码简化书写方式,实际上可以粗略的理解为接口名、方法名、参数类型省掉不写,并使用->这个符号来表示参数名(符号左侧)和代码逻辑(符号右侧)。

kotlin中使用lambda表达式有以下几种类型

// 无参数无返回值
Thread(Runnable {
    sleep(1000)
}).start()
// 单参数不带返回值
view.setOnClickListener { v ->
    Log.e("tag", "${v.tag}")
}
// 多参数带返回值
view.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
    Log.e("tag", "keyCode$keyCode, ${event.keyCode}")
    if (event.keyCode == KeyEvent.KEYCODE_BACK){
        return@OnKeyListener true
    }else{
        return@OnKeyListener false
    }
})

看到这里,再去看前面的代码,是不是清晰很多了呢。kotlin中代码简化方式感觉还比较多,这里的三种方式决不是全部。

1.10、延迟加载

通过将by lazy关键字作用在常量上,会在第一次调用常量的时候初始化,并将最后一行作为返回值,以后再调用该常量是都不再执行最后一行之前的代码。

val lazyValue: String by lazy {
    println("computed!")
    "Hello"
}

fun main(args: Array<String>) {
    println(lazyValue)
    println(lazyValue)
}

执行main方法后输出为

/* 输出:
 * computed
 * Hello
 * Hello
 */

所以能够看出,lazyValue两次调用都输出了最后一行,第一次调用的时候执行了最后一行之前的代码,第二次执行就直接输出了最后一行,所以看得出来延迟加载可以被叫做懒加载,而且是真的懒。

到这里就将目前遇到的kotlin知识总结完毕,相信懂了这些知识后,可以愉快的去进行android开发了。

2、参考文献

这里还是得感谢那些先吃螃蟹的同学,把参考文献也一起列举出来吧

1、五分钟学会 Kotlin 语法

2、Kotlin随笔 委托属性之延迟加载

3、KotLin 相关文档

4、Kotlin构造函数

5、Kotlin中when表达式的使用:超强的switch(KAD 13)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值