Kotlin学习笔记1-1 入门-语法基础

来源:互联网 发布:淘宝vip专享 编辑:程序博客网 时间:2024/06/06 01:34

入门-语法基础

Kotlin官网:Getting Started-Basic Syntax

声明包

和Java相同,必须在源文件的最上端。
不同的是声明的包不要求和文件夹路径相同,可以放在任意位置

声明方法

fun 方法名(参数):返回值{ … }

例如一个”两个Int参数,返回值也为Int”的函数

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

可以写成表达式的方式,上面的函数等价于

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

对于无返回值函数,Java中void在Kotlin中对应为Unit,并且可以省略

fun printSum(a: Int, b: Int) {    println("sum of $a and $b is ${a + b}")}

等价于

fun printSum(a: Int, b: Int) : Unit{    println("sum of $a and $b is ${a + b}")}

声明变量

只读变量

val a: Int = 1  // 立刻赋值val b = 2   // 立刻赋值,编译器可以推测出b为Int型,所以Int型声明可以省略val c: Int  // 如果不是立刻赋值则必须声明类型,因为编译器无法推测出c = 3       // 推迟赋值

可变变量

var x = 5x += 1

顶层变量

var x = 0fun foo(){    x +=1}

注释

//单行注释/* 多行    注释*/

和Java不同,多行注释可以嵌套

/*    注释    /*    注释2     */*/

字符串模板

和Java中String的format类似,可以用$替换变量,支持表达式

val a = 1println("a=$a")println("a+1=${a+1}")

输出结果

a=1

a+1=2

条件表达式

if else else if写法和Java相同

fun maxOf(a: Int, b: Int): Int {    if (a > b) {        return a    } else {        return b    }}

区别是Kotlin中if为表达式,而不是Java中的语句块,可以用来赋值。上面的例子也能写成

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

例如给变量赋值

val a = 1val b =if(a>10){    10}else if(a>0){    1}else{    -1}println("b=$b")

输出结果

b=1

可null变量和null检查

Kotlin中默认认为变量是不能为空的,如果需要一个变量可以为空必须显式声明
例如方法返回值可能为空

fun parseInt(str: String): Int? {    return null}

如果对象被声明为可能为空,在使用时必须检查不为后使用或者声明为空跳过。Kotlin是空安全的。

val a = parseInt("1") //a为Int?if(a!=null){ //检查不为空后调用方法    println(a.toLong())}println(a?.toLong()) //声明为空时跳过

类型检查和自动类型转换

Kotlin中使用”is”关键字检查类型是否匹配,相当于Java中的instanceof,obj is String,obj !is String。

Kotlin中检查过类型后,在检查类型条件的作用域中都可以直接当做对应类型使用,无需再声明类型转换

fun getStringLength(obj: Any): Int? {    if (obj is String) {        // `obj` is automatically cast to `String` in this branch        return obj.length    }    // `obj` is still of type `Any` outside of the type-checked branch    return null}

循环语句

for循环和JS类似,使用for-in的格式

val items = listOf("apple", "banana", "kiwi")//直接遍历列表元素for (item in items) {    println(item)}//通过下标遍历for (index in items.indices) {    println("item at $index is ${items[index]}")}

while循环和Java相同

when表达式

Kotlin中没有switch,取而代之的是when。

Java中switch只能用int型常量作为case条件(1.7中后支持String),和Java不同,Kotlin的when支持任意条件。

和if类似,when也是表达式,可以为其他对象赋值。

fun describe(obj: Any): String =when (obj) {    1          -> "One"    "Hello"    -> "Greeting"    is Long    -> "Long"    !is String -> "Not a string"    else       -> "Unknown"}

区间

Kotlin中使用a..b声明区间,使用”in”关键字声明区间内,可以作为循环条件或者if条件使用。

//作为if条件//例1:val x = 10val y = 9if (x in 1..y+1) { //使用变量作为区间边界    println("fits in range")}//例2:val list = listOf("a", "b", "c")if (-1 !in 0..list.lastIndex) {     println("-1 is out of range")}if (list.size !in list.indices) { //不在区间内    println("list size is out of valid list indices range too")}//作为for循环的条件for (x in 1..5) { //[1,5]    print(x) //输出12345}for (x in 1 until 5) { //[1,5)        print(x) //输出1234    }for (x in 1..10 step 2) { //步进为2    print(x) //输出13579}for (x in 9 downTo 0 step 3) { //步进为3,倒序    print(x) //输出9630}

集合

val items = listOf("apple", "banana", "kiwi")//遍历元素for (item in items) {    println(item)}//判断集合是否包含元素when {    "orange" in items -> println("juicy")    "apple" in items -> println("apple is fine too")}//使用lambda表达式操作集合fruits.filter { it.startsWith("a") }.sortedBy { it }.map { it.toUpperCase() }.forEach { println(it) }

创建对象

Kotlin没有new关键之,创建类的对象直接使用val a = 类名(参数)

val rectangle = Rectangle(5.0, 2.0) //no 'new' keyword requiredval triangle = Triangle(3.0, 4.0, 5.0)
原创粉丝点击