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

历史: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’  

这里写图片描述

(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源码
快捷键打开action搜索框
点击Decompile
反编译后生成的Java代码

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

猜你喜欢

转载自blog.csdn.net/unicorn97/article/details/81160681