一、kotlin 语言介绍
与java类似的一种基于JVM虚拟机的语言,java其实也是一种解释型语言,生成的class文件供JVM解释,同时kotlin也是一样的kotlin就是为了解决java的各种痛点而产生的,利用kotlin可以大大减少开发过程中的代码量编写,有一套几乎可以杜绝空指针的机制,kotlin没有分号
二、如何运行Kotlin代码
郭霖大神这本第三行代码是在AS里面运行的,当然我们也可以用idea运行,eclipse应该也可以多安装一个kotlin插件就ok,生成后缀为kt的kotlin文件,利用以下简单代码段即可编写第一个程序,与java的主函数很像,不过代码更加简洁
代码语言:javascript复制fun main (){
prinln("hello world")
}
三、编程之本:变量和函数
变量
代码语言:javascript复制val a //a声明为不可变的
var b//b声明为可变的
为了保证程序中变量的稳定,kotlin语言设计之初就推荐我们尽量使用val定义变量,除非变量必须要改变
代码语言:javascript复制val a = "hhhh"
val a :String = "hhhhh"
kotlin 有一套出色的类型推导机制,所以不指定时根据后面的赋值即可自动推导出他的类型,如果需要指定,需要:变量类型,有一点与java不同的就是,kotlin没有基本类型,全部利用类来替代,Int 相当于 int ,首字母全部大写。
函数
与java相似,method方法Java中的称呼,本质上是一样的,不过有一个比较特殊的,即语法糖,当只有一行代码时,可以直接将其写在尾部然后利用等号连接
代码语言:javascript复制fun hhh(name : String ,adress : String ) = max (name.length,adress.length)
fun hhh(name : String ,adress : String ) :Int{
max (name.length,adress.length)
}
四、程序的逻辑控制
if条件语句
if语句拥有和java几乎一样的功能和用法,不过kotlin的if具有返回值,这使得它可以利用语法糖来简化代码,以每个条件的最后一行作为返回值
代码语言:javascript复制fun hhh(name :String ,adress :String ) = if (name.length > adress.length) name.length else adress.length
when 条件语句
类似于java里面的switch语句,不过解决了很多痛点,例如break经常忘记加,以及匹配值类型的局限性,利用when可以省去很多不必要的代码
代码语言:javascript复制//基本形式为 匹配值 -> {代码块}
fun getScore (name :String ) = when (name){
"Tom" -> 86
"Jim" -> 77
else -> 0
}
还有一种不带参数的写法,更加灵活
代码语言:javascript复制fun getScore (name :String ) = when {
name.startsWith("Tom") -> 86
name == "Tom" -> 86
name == "jim" -> 77
else -> 0
}
循环语句
kotlin 里面的for循环是for in ,比java里面的加强for更加好用,while的用法二者几乎一样
代码语言:javascript复制//kotlin里面有区间这个概念
//for exmple
val a = 1..10
//代表区间[1,10]间隔1
val b = 0 until 10
//代表区间[0,10)
//也可以设置间隔
val c = 1..10 step 2
//也可以倒序输出
val d = 10 downTo 1
五、面向对象编程
类与对象
类和java中的差不多,就是不用加new关键字了
继承与构造函数
java里面默认继承object类,而kotlin则默认不继承,需要加上open关键字才可以,继承只需要加上:即可
代码语言:javascript复制//即Student继承Person
open class Person(){
}
class Student :Person(){
}
构造函数相对而言比较复杂,分为主构造函数和次构造函数,次构造函数用constructor声明
接口
与继承使用差不多,允许对接口进行默认实现,java和kotlin中有函数可修饰的修饰符
代码语言:javascript复制Java public private protected default
Kotlin public private protected internal
Java 默认default 而kotlin默认public
数据类和单例类
数据类 :class前面加个data即可
单例类:创建类时使用object关键词
六、Lambda 编程
集合的创建以及使用
Set 不存放重复元素,map可以利用类似数组下标进行赋值,list可以简化赋值
集合的函数式API
lambda表达式的基本语法结构
代码语言:javascript复制{参数名1:参数类型,参数名2:参数类型 -> 函数体}
最后一行代码作为函数的返回值
Java函数式API的使用
与后面android sdk 接入有关,不过目前还没怎么看懂,用到了再说
七、空指针检查
可空类型系统
kotlin默认所有变量都不可为空
类型?代表此类型可为空
判断辅助工具
代码语言:javascript复制?.//代表为空什么都不做,不为空执行句号后面的逻辑
?://不为空返回左边,否则返回右边的
!!//强制判断非空
let//就不太明白
八、kotlin的小魔术
字符串内嵌表达式
利用$进行内嵌,解决java字符串拼接时一堆加号和分号的痛点
代码语言:javascript复制val a = "22"
val b = "67"
println("$a hhhh $b")
//相当于java的这种效果
//println(a "hhhh" b);
函数的参数默认值
可以通过键值对进行传参,可以做到和次构造函数一样的作用