欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Kotlin笔记1-变量和流程控制

程序员文章站 2022-05-28 14:30:04
...

历史:2011年7月,JetBrains推出Kotlin项目
2016年2月15日,Kotlin V1.0发布
2017年 Google I/O大会,Kotlin成功官方Android开发语言。

建议学习网站:kotlin中文网: https://www.kotlincn.net/
官网: http://kotlinlang.org/
官方在GitHub上的文档说明:https://github.com/JetBrains/kotlin/tree/master/spec-docs

《Kotlin 极简教程》一书,作者在GitHub上有各个chapter的电子版,如第三章:
https://github.com/EasyKotlin/chapter3_kotlin_basics

废话不多说,直接开讲。

1. package

(1)和java 相同的package 和 import 关键字。但是其中有一点区别:

可以看到包名 != 文件夹路径,文件名!=类名(当你你也可以相同。)对于某些时候的文件组织可能有些作用,但是大多数情况下我们还是默认使用java的路径规则。
import 可以使用一个as关键字对类进行重命名
                import bar.Bar as bBar // bBar stands for 'bar.Bar’  

Kotlin笔记1-变量和流程控制

(2)使用import导入类,或者包级函数(kotlin 中函数是一等公民,可以直接位于一个文件.kt 中),在同一个package里,可以不用导入,直接调用
import 可以使用一个as关键字对类进行重命名
import bar.Bar as bBar // bBar stands for 'bar.Bar’

(3)如果不定义package,默认是在根级目录。

2. 变量

(1)var 可写,val是只读,建议尽量使用val

(2)编译器可以推断类型,多数情况,不用指定类型
val str : String = "abc"( 语句后可不加;)
可以直接写成val str = "abc"

(3)使用is代替Java中使用的instance of

(4)应用字符串的值,可以使用美元符号($)

(5)变量分为三种

class ClassNew{
    var a:String = "你好"   //成员变量
    fun print(){
        var b : String = "kotlin"  //本地变量
        Log.d("sss",a + b +c)
        c = "我是程序猿2"
    }
}
var c : String = "我是程序猿"  //全局变量
成员变量和全局变量需要在定义的时候进行初始化(成员变量可以使用lateinit 延迟初始化,后面会介绍),  而本地变量只需要保证在使用前初始化即可。

这里插播一点,如果想看kotlin代码对应的Java代码,
可以直接在Intellij IDEA 里,按快捷键 ctrl+shift+A
MAC的话,按快捷键Command(⌘) + Shift (⇧) + A,输入选择Kotlin Bytecode,然后点击Decompile就可以看到反编译后的Java代码,如下图所示:
Kotlin笔记1-变量和流程控制
Kotlin笔记1-变量和流程控制
Kotlin笔记1-变量和流程控制
Kotlin笔记1-变量和流程控制

fun main(args: Array) {
Hi(“cyc”)
print(“Hello World”)
println()
}

3. 流程控制语句

(1)if 是一个表达式,()中的表达式只能是布尔值,条件体里只有一条语句时,{ }可省略,建议加上
val max = if(a > b) a else b

(2)when表达式
when类似于switch-case表达式,像if一样,when的每一个分支也可以是一个代码块,它的值是块中最后的表达式的值。else类似于default,其中多个相同处理逻辑的分支可以用逗号分隔,可以结合(in) 和(!in)来检测一个值是否在一个区间或者集合中。

fun switch(x: Int) {
    val s = "123"
    when (x) {
        -1, 0 -> print("x == -1 or x == 0")
        1 -> print("x == 1")
        2 -> print("x == 2")
        8 -> print("x is 8")
        parseInt(s) -> println("x is 123")
        else -> { // 注意这个块
            print("x is neither 1 nor 2")
        }
    }
}


    val x = 1
    val validNumbers = arrayOf(1, 2, 3)
    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")
    }

when结合lambda表达式,可以进一步简化代码:

data class MyDate(val year: Int, val month: Int, val dayOfMonth: Int) : Comparable<MyDate> {

    override fun compareTo(other: MyDate) =
            when {
                this.year != other.year -> this.year - other.year
                this.month != other.month -> this.month - other.month
                else -> dayOfMonth - other.dayOfMonth
            }

}

fun compare(date1: MyDate, date2: MyDate) = date1 < date2
相关标签: kotlin