虽然已经用kotlin写了两个项目了,但还是在空闲的时刻,看了一下官网API关于kotlin的资料加深印象,重新稳固一下,从零到还能知道怎么应用,复习一下,之前写的有什么问题,废话不多说了,开始吧(备注,很多的东西都是根据翻译的东西而来)
语句和表达式:
fun max(a: Int, b: Int): Int {
return if (a > b) a else b
}
>>> println(max(1, 2))
kotlin的方法都是从fun 开始的java是先定义修饰词,再定义变量,而kotlin是先定义变量再定义修饰词(中间加了冒号!)java无返回值是void 而kotlin什么都不用写,java有返回值就把void改下就好,而kotlin只需在括号后面加需要返回的类型(也是加了冒号)
再看看 if (a> b) a else b 这个就是java的一般if {}else{}嘛 ,而kotlin却是一个三目运算,比较
java中的语法
条件判断语句 ? "结果为true" : "结果为false";
kotlin中的语法
if(条件判断语句) "结果为true" else "结果为false"
有点奇怪,,不过没法,只好记住了。
变量
在Java中,可以使用类型启动变量声明。这不适用于Kotlin,因为它允许您从许多变量声明中省略类型。因此,在Kotlin中,以关键字开头,您可以(或不)将类型放在变量名称之后。
val a = "a"
val a: String? =null
lateinit var a:String
而lateinit var a:Int //会出现报错问题(lateinit不能与基本类型一起使用)
lateinit:
1.修饰的变量与属性不能是原始数据类型
2.会被初始化很多次
3.lateinit只能与var 一起连用
讲到这里必须得讲var 和val
var 修饰的可变 可以重新分配一个值,与java声明变量一样
var 修饰的不可变 与java final一样,创建的时候必须初始化,并且以后的值不可改变。
接着上面第二定义的string有个 val a: String?= null 有个?表示,这个变量可为null,kotlin在这里处理了一下,相比java提前做了null处理,讲到这里不得不将(!!),双叹号,表示该修饰的类型不能为null, 加入服务端,给你这个字符串传了一个null
o(* ̄︶ ̄*)o呵呵,,你懂的
结果就知道了,有些时候用到kotlin会觉得奇怪,为什么定义了var ss?= null ,后面用到这个变量的时候,必须要加!!,不然编译不通过,就如刚刚说的,这个时候如果服务端传个null,不就爆了,我这里有两个方法,,
1.用lateinit,先初始化,不用空判断,但要慎用,也会出问题,
2.提前判null就好了。(if ss == null)return
更简单的字符串模版
package ch02.ex1_4_1_StringTemplates
fun main(args: Array<String>) {
val name = if (args.size > 0) args[0] else "Kotlin"
println("Hello, $name!")
}
在字符串里面添加一个${}大括号里面显示数据,免去了一个+号或者多个使用+问题 甚至可以在里做判断
fun main(args: Array<String>) {
println("Hello, ${if (args.size > 0) args[0] else "someone"}!")
}
类和属性
用过java的都知道是面向对象编程:
/* Java */
public class Person {
private final String name;
public Person(String name) {
this.name = name;
}
public String getName() {
return name;
}
}
kotlin中
class Person(val name: String)
就这么简单,java有快速生成类工具,那么kotlin肯定也有了在setting->plugins -> Install plugin from 输入Kotlin data 可以看到Generate kotlin data class from JSON 安装就行了。但会自动生成data class()这种,这个data 是什么意思呢?
data class就是一个类中只包含一些数据字段,类似于vo,pojo,java bean。一般而言,我们在Java中定义了这个数据类之后要重写一下toString,equals等方法。要生成get,set方法。
然而在Kotlin中这些都不在需要自己手动去敲了,编译器在背后默默给我们生成了如下的东西
- equals()/hashCode()
- toString()方法
- componentN()方法
- copy()方法
也可以去掉data ,因为kotlin自动get、set了。
区间 ..
区间是以两个点点表示。
for (i in 1..5) print(i) // 输出“1235” // 等同于 1 <= i && i <= 5
// 使用 step 指定步长
for (i in 1..4 step 2) print(i) // 输出“13”
for (i in 4 downTo 1 step 2) print(i) // 输出“42”
// 使用 until 函数排除结束元素
for (i in 1 until 10) { // i in [1, 10) 排除了 10
println(i)
}