浅谈kotlin

常量和变量

常量与变量都可以没有初始化值,但是在引用前必须初始化编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断。如果不在声明的时候初始化则必须提供变量的类型

var和val

var是variable的缩写val是value的缩写,val是赋值一次只读属性

var sum1: Int = 3
val sum2: Int = 3
常量
const val url = "www.nuo.com"
 lateinit 

关键字代表了 "晚期初始化"只有在程序的后期初始化时,才会为lateinit 变量分配内存,而不是在它们被声明时

lateinit var view:View
类型推断
var a = "haha"//推断类型Int
检查NUll
//类型后面加?表示可为空
var age: String? = "28"
//字段后面加"!!"抛出空指针异常
val ages = age!!.toInt()
//字段后面加”?“不做处理返回 null
val ages1 = age?.toInt()
//使用”?:“ 表示age为空返回-1
val ages2 = age?.toInt() ?: -1
构造方法
class User {
    var name: String
    constructor(name: String) {//构造方法
        this.name = name
    }
}

class User(var name: String) { }
静态方法

当你给一个类使用了object关键字这个类是单例所有属性和方法都是静态属性和方法 

object User {
    fun test(){}
}

在非单例类中添加静态属性和方法

class User {
    companion object{
        val TEST = "this is static final string"
    }
}
 函数的定义
fun sum(a: Int, b: Int, c: Int): Int {
    return a + b + c
}

fun sum(a: Int, b: Int, c: Int) = a + b + c

//lambda(匿名函数)
val sum: (Int, Int, Int) -> Int = { a, b, c -> a + b + c }
参数默认值
fun sayHello(hello:String="hello world") = println("$hello say hello ")
Range

区间自动化的数数工具

val range = 1..10
Sequence

在数据量比较大或者未知的时候提供方便的流式处理

val sequence = sequenceOf(0,1,2,3,46,5,3,2)
when条件控制
when (name.length) {
    0 -> println("Empty")
    1, 2, 3 -> println("Little")
    else -> println("Many")
}
 泛型
    inline fun <reified T> printIfTypeMatch(item: Any) {
        if (item is T) {
            println(item)
        }
    }