美文网首页
# kotlin学习 基础语法(一)

# kotlin学习 基础语法(一)

作者: justin_crashed | 来源:发表于2020-08-13 11:21 被阅读0次

kotlin学习

hello world

新建一个kt文件,

fun main(args:Array<String>) {

    println("Hello world!");
}


程序主入口main方法, 无需新建类即可运行,函数声明用fun

fun sum(a:Int, b:Int):Int{
    return a + b;
}

返回值写在参数之后

表达式可以作为函数体,返回值类型自动推断

fun sun(a:Int, b:Int) = a+b;

返回无意义的值用Unit表示

fun test():Unit {
println("test");
}

变量赋值

变量赋值声明关键字:var、val
var:声明变量
val:声明常量

var i:Int = 1;
val PI:Double = 3.14;

当声明并赋值时,数据类型可以省略, 会自动推断数据类型
var i = 1;
val PI = 3.14

当声明但不赋值时,不能省略数据类型
var i:Int;
val PI:Double;

字符串模板

var s = "aaaaa";
var b = "str = $s";
var c = "${b.replace("str", "who")}"

条件表达式

fun testIf(a:Int, b:Int):Int {
    if(a > b) return a;
    return b;
}

在kotlin中,if还可以用作表达式

fun max(a:Int, b:Int) = if(a > b) a else b

空值与null检测

当某个值可以为空时,需要在类型后添加?表示可以为空
此时,声明时不能省略类型

var obj:Objects ? = null;
// 表示返回值可以为null
fun parseInt(str:String):Int?{
    ...
}

类型检测与自动类型转换

is:判断数据是否是某个类型。如果一个不可变的局部变量已经被判断为某个类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // 如果走到了这里,说明判断出obj时String,虽然方法参数里obj声明的是any,但是此时已经不需要显式的将obj转为String
        return obj.length
    }

    // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
    return null
}

** 强调为不可变是因为如果可变,那可能会变成其他类型,那就不适用了 **

for循环

var items = listof("apple", "banana", ""kiwifruit);
// 根据元素遍历
for (item in items) {
    println(item);
}

// 根据下标便利
for (item in items.indices) {
    println(items[item]);
}

while 循环

var index = 0;
while (index < items.size) {
    println(items[index]);
    index ++;
}

when表达式

private fun testWhen(s: Any?) {
        when(s) {
            "a" -> 1;
            "b" -> 2;
            is String -> 3;
            1 -> "n";
            2 -> {
              println("222");  
            };
            else -> "else";
        }
    }

有点类似java中的 switch

区间 range

var x = 6;
var y = 9;
if(x in 0..y) {
    println("x in 0 - y");
}

注意:区间只用于数字

集合

集合的迭代可以用的上面的 for in 循环

var items = listof("a", "b", "c");
for(item in items) {
    println(item);
}

判断集合中是否包含某元素 用while in || when

while ("a" in items) {
    println("items include a");
}

when {
    "a" in items -> println("aaa");
    "d" in items -> println("ddd);
}

用lambda来过滤和映射集合 ,与java8 lambda stream大致

items.filter{ it.indexOf("a") >= 0 }
    .sortBy{ it }
    .map{ it.toUpperCase() }
    .forEach{ println(it) }

相关文章

网友评论

      本文标题:# kotlin学习 基础语法(一)

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