五分钟学会 Kotlin 语法

为何使用Kotlin

项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到如今,坚持用来开发的切身感觉。由于语法与Java的区别挺大的一开始很想放弃,若是不是由于项目在使用,想必不多人会尝试这样一门小众语言,可是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了,Kotlin在兼容Java的基础上还能大大提高开发效率。Kotlin有许多特性但对于开发来讲,快速适应和学习更为重要,不少时候咱们都是在不明白其缘由就开始使用的,正如咱们不可能把Retrofit原理研究透才使用它。只要它足够稳定成熟,并能有效的提高开发效率都是值得尝试的。鄙人不才,目前使用Kotlin的缘由主要是由于它语法简洁,支持lambda表达式,强大的when语法,不用写分号结尾,光是这些就足以让我喜欢Kotlin。至于空安全之类的特性,毕竟服务端数据类型太多null了并没多大感触,这些特性在实际应用中潜移默化的就吸取了,以致于如今遇到几个Java编写的代码,都有些不适应了。html

万能的冒号

在Kotlin中冒号:用万能来称呼毫不为过。常量变量的类型声明,函数的返回值,类的继承都须要它java

//val表示常量var表示变量声明 val name: String = "tutu" //省略类型说明 var age = "23" //fun表示函数 fun getName(): String{ return "tutu" } //类继承 class UserList<E>(): ArrayList<E>() { //... }

除此以外还有一个特别的地方也须要它,使用Java类的时候。Kotlin最终会仍是编译成Java字节码,使用到Java类是必然的,在Kotlin语法以下git

val intent = Intent(this, MainActivity::class.java)

类名::class.java没有为何就这么写记着就是github

我是谁的@

除了冒号另外一个重要符号@,想必用到内部类和匿名内部类的地方必定不少,再加上支持lambda语法,没有它谁告诉你thisreturn指的是哪个web

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

偷懒的方法

1). Kotlin特点
Java的getter/setter方法自动转换成属性,对应到Kotlin属性的调用浏览器

public class User { private String name; private String age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getAge() { return age; } public void setAge(String age) { this.age = age; } }

这样一个Java类在Kotlin中只需这样调用安全

val user = User() //赋值 user.name = "tutu" user.age = "23" //取值 val name = user.name val age = user.age

反之Kotlin的属性自动生成Java的getter/setter方法,方便在Java中调用,一样的定义在Kotlin中函数

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

咱们的getter/setter方法有时不会这么简单,这就须要自定义getter/setter了,另起一行设置get()/set(value)方法,实现一个Java中经常使用的单例,这里只为了展现,单例在Kotlin有更简单的方法实现,只要在 package 级别建立一个 object 便可学习

class User { companion object { @Volatile var instance: User? = null get() { if (field == null) { synchronized(User::class.java) { if (field == null) field = User() } } return field } } var name: String? = null var age: String? = null }

自定义getter/setter重点在field,跟咱们熟悉所Java的this指代当前类同样,field指代当前参数,直接使用参数名instance代替不会报错但单例就没效果了this

2). 字符串模板
在Java中拼接字符串的代码可读性都不好,在Kotlin字符串拼接变得很是简洁,只需用$后面加上参数名,复杂的参数要加上{}

val user = User() //赋值 user.name = "tutu" user.age = "23" //取值 val name = user.name val age = user.age var userInfo = "name:${user.name}, age:$age" //输出结果:name:tutu, age:23

3). lambda
一开始以为lambda很高级彻底看不懂,其实很简单的就是把接口名、方法名和参数类型省掉不写再加个->罢了,明白这点了就不介绍。

新面孔

1). 延迟加载
2). 流程控制
内容上一篇写过参考 Android Kotlin 学习笔记,不重复介绍

空判断

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式一种像Java同样抛出空异常,字段后加!!,另外一种不作处理直接跳过,字段后加?

//类型后面加?表示可为空 var age: String? = "23" //抛出空指针异常 val ageInt = age!!.toInt() //不作处理跳过 val ages = age?.toInt()

注意事项

内部类和参数默认为public,而在Java中为private
类默认为不可继承(final),想要可被继承要声明为openabstract
取消了static关键字,静态方法和参数统一写在companion object
internal模块内可见,inner内部类

以上仅是对使用频率较高的语法总结,学会基本能够阅读Kotlin代码,遇到点问题Google速查一下,至于智能转换、类型推导之类的不用说使用后喜欢天然就会了。固然这只是kotlin的基本语法,方便Java快速熟悉kotlin,深刻学习还请阅读相关资料。

相关连接

在线学习
Kotlin 官方文档
Kotlin 中文文档
Kotlin 中文文档 这个感受像官网的中文版,翻译质量很好,不过左侧的分类无法点击,不知是否是浏览器问题,我就一个个罗列出来了
入门
基础
类和对象
函数和lambda表达式
其余
文档
互操做
FAQ
最终找到了翻译出处kotlin-web-site-cn
http://tanfujun.com/kotlin-web-site-cn/

相关文章
相关标签/搜索