一、基础语法
在语句的结尾不用加;
声明一个方法需要加关键字fun
如果函数是重载父类的方法,则需要加override关键字
方法中的参数格式为:形参名+冒号+形参类型
fun a (str : String, num : Int)
二、定义类
kotlin默认唯一构造器,暨类定义同时也是构造器
class Person(name : String, age : int) {
init{
// do some thing
}
}
翻译成java为:
final public class Person {
public Person(String name, int age){
init();
}
private void init(){
// do some thing
}
}
仔细看会发现,翻译成的java类定义前面有final修饰符,因为在kotlin中类默认为final的,也就是不可继承的。如果要继承,需要声明为open,或者abstract。
open class Person(name : String, age : int) {
init{
// do some thing
}
}
如果init中没有操作,则可以省略
class Person(name : String, age : int)
如果连参数也没有,甚至可以这么写
class Person
三、定义函数方法
函数方法要加fun关键字,方法的返回类型写在参数后
fun sum (a : Int, b : Int) : Int {
return a+b
}
如果像上面这样,函数内只有一条语句,则可以直接赋值
fun sum (a : Int, b : Int) : Int = a+b
kotlin编译器会自动根据返回值推测方法返回类型
fun sum (a : Int, b : Int) = a+b
如果方法需要返回值,则返回Unit,类似java中的void,当然Unit也是可以忽略的
fun printSum (a : Int, b : Int) : Unit = print(sum(a, b))
//等价于
fun printSum (a : Int, b : Int) = print(sum(a, b))
四、定义变量
kotlin中将java中的变量演化成了两种:var表示变量,val便是常量(相当于java中用final修饰)
五、使用泛型Array代替数组
例如最经典的main方法
Java:
public static void main(String[] args){
// do some thing
}
Kotlin:
fun main(args : Array<String>){
// do some thing
}
六、条件语句
fun max(a: Int, b: Int): Int {
if (a > b)
return a
else
return b
}
//或者也可以把if语句作为省略方法体的方法
fun max(a: Int, b: Int) = if(a>b)a else b
七、空值
kotlin中很大的一个特点就是null安全,在java中需要到处处理的空判断带来的代码层次深,以及没处理好空判断带来的空指针异常NullPointerExecption,在这里能得到很好的解决。kotlin通过?将是否允许为空分割开来,比如str:String为不能空,加上?后的str:String?为允许空,通过这种方式,将本是不能确定的变量人为的加入了限制条件。
var value1 : String = "abc" //value1 不允许为空
var value2 : String? = "" //value2允许为空
八、循环
for循环,使用in关键字
fun main(args : Array<String>) {
for(arg in args)
print(arg)
for(i in args.indices)
print(args[i])
for((index, value) in args.withIndex()){
println("index : $index, value : $value")
}
}
九、when表达式(类似于java中的switch)
when的特性与switch差不多,都是通过列举比对列举出来的条件进行匹配,满足条件的分支会被执行。when可以作为表达式,也可以作为声明。如果用作表达式的话,那么满足条件的分支就是总表达式。如果用做声明,不满足条件的分支的的的值会被忽略,只保留满足条件的分支,而且返回的值也是最后一个表达式的值。
传统用法
var x = 3
when (x) {
1 -> print(1)
2 -> print(2)
else -> print(5)
}
作为表达式,满足条件的分支会被作为when的返回值
var x = 3
var result = when (x) {
1 -> 1
2 -> 2
else -> 5
}
分支条件一致,如果有分支可以用同样的方式处理的话, 分支条件可以连在一起处理。
when (x) {
0,1 -> print("x == 0 or x == 1")
else -> print("otherwise")
}
使用任意表达式作为分支的条件
when (x) {
parseInt(s) -> print("s encode x")
else -> print("s does not encode x")
}
when (x) {
in 1..10 -> print("x is in the range")
in validNumbers -> print("x is valid")
!in 10..20 -> print("x is outside the range")
else -> print("none of the above")
}
网友评论