美文网首页
kotlin 语法

kotlin 语法

作者: sirai | 来源:发表于2018-04-26 17:23 被阅读22次

一、基础语法

在语句的结尾不用加;

声明一个方法需要加关键字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")
}

相关文章

网友评论

      本文标题:kotlin 语法

      本文链接:https://www.haomeiwen.com/subject/dbdmlftx.html