Kotlin学习day01_基础语法

作者: 等风来_Android | 来源:发表于2017-06-06 11:48 被阅读105次

    关于Kotlin的相关介绍不再这里说明,想了解的可以百度,本文主要记录Kotlin的基本语法,下面进入正题:

    一,定义函数

    1,带有两个int参数,返回值为int的函数:

    关于Kotlin的相关介绍不再这里说明,想了解的可以百度,本文主要记录Kotlin的基本语法,下面进入正题:

    运行结果:sum of 3 and 5 is 8

    2,将表达式作为函数体、返回值类型自动推断的函数:

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

    fun main(args: Array) {

    println("sum of 19 and 23 is ${sum(19, 23)}")

    }

    运行结果:sum of 19 and 23 is 42

    3,函数返回无意义的值:

    fun printSum(a: Int, b: Int): Unit {

    println("sum of $a and $b is ${a + b}")

    }

    fun main(args: Array) {

    printSum(-1, 8)

    }

    运行结果:sum of -1 and 8 is 7 注:此处,关键字Unit也可以省略不写

    二:定义局部变量,常量

    常量用关键字val表示,变量用关键字var表示

    常量:

    val a : Int = 1 //立即赋值,并明确为Int类型

    val b= 2 //自动推断为Int类型

    val c : Int //没有初始值,类型不能省略

    c= 3//立即赋值

    变量:

    var i= 5 //自动推断为Int类型

    i+= 1

    结果:i= 6

    三:注释

    类似java

    // 这是一个行注释

    /* 这是一个多行的块注释。 */

    四:使用字符串模板

    var a = 1

    // 模板中的简单名称:

    val s1 = "a is $a"

    a = 2

    // 模板中的任意表达式:

    val s2 = "${s1.replace("is", "was")}, but now is $a"

    运行结果:a was 1, but now is 2

    五:使用条件表达式

    fun maxOf(a: Int, b: Int): Int {

    if (a > b) {

    return a

    } else {

    return b

    }

    }

    fun main(args: Array) {

    println("max of 0 and 42 is ${maxOf(0, 42)}")

    }

    运行结果:max of 0 and 42 is 42

    当然,上述内容也可以简写为:

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

    fun main(args: Array) {

    println("max of 0 and 42 is ${maxOf(0, 42)}")

    }

    结果是一样的

    六:使用可空值或者null检测

    当某个变量的值可以为null的时候,必须在声明处的类型后添加?来标识该引用可为空

    如果str的内容不是数字返回null

    funparseInt(str:String):Int?{

    // ……}

    例:

    fun parseInt(str: String): Int? {

    return str.toIntOrNull()

    }

    fun printProduct(arg1: String, arg2: String) {

    val x = parseInt(arg1)

    val y = parseInt(arg2)

    // 直接使用 `x * y` 可能会报错,因为他们可能为 null

    if (x != null && y != null) {

    // 在空检测后,x 和 y 会自动转换为非空值(non-nullable)

    println(x * y)

    }

    else {

    println("either '$arg1' or '$arg2' is not a number")

    }

    }

    fun main(args: Array) {

    printProduct("6", "7")

    printProduct("a", "7")

    printProduct("a", "b")

    }

    运行结果:

    42

    either 'a' or '7' is not a number

    either 'a' or 'b' is not a number

    七:使用类型检测及自动类型转换

    is运算符检测一个表达式是否某类型的一个实例。 如果一个不可变的局部变量或属性已经判断出为某类型,那么检测后的分支中可以直接当作该类型使用,无需显式转换:

    fun getStringLength(obj: Any): Int? {

    if (obj is String) {

    // `obj` 在该条件分支内自动转换成 `String`

    return obj.length

    }

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

    return null

    }

    fun main(args: Array) {

    fun printLength(obj: Any) {

    println("'$obj' string length is ${getStringLength(obj) ?: "... err, not a string"} ")

    }

    printLength("Incomprehensibilities")

    printLength(1000)

    printLength(listOf(Any()))

    }

    运行结果:'Incomprehensibilities' string length is 21

    '1000' string length is ... err, not a string

    '[java.lang.Object@6b884d57]' string length is ... err, not a string

    八:使用for循环

    fun main(args: Array) {

    val items = listOf("apple", "banana", "kiwi")

    for (item in items) {

    println(item)

    }

    }

    运行结果:

    apple

    banana

    kiwi

    或者:

    fun main(args: Array) {

    val items = listOf("apple", "banana", "kiwi")

    for (index in items.indices) {

    println("item at $index is ${items[index]}")

    }

    }

    运行结果:

    item at 0 is apple

    item at 1 is banana

    item at 2 is kiwi

    注:indices表示集合的下标,本例先对集合的下标进行遍历,再依次取出下标对应的内容

    九:使用while循环

    fun main(args: Array) {

    val items = listOf("apple", "banana", "kiwi")

    var index = 0

    while (index < items.size) {

    println("item at $index is ${items[index]}")

    index++

    }

    }

    运行结果:

    item at 0 is apple

    item at 1 is banana

    item at 2 is kiwi

    十:使用when表达式

    作用类似java的switch

    fun describe(obj: Any): String =

    when (obj) {

    1          -> "One"

    "Hello"    -> "Greeting"

    is Long    -> "Long"

    !is String -> "Not a string"

    else      -> "Unknown"

    }

    fun main(args: Array) {

    println(describe(1))

    println(describe("Hello"))

    println(describe(1000L))

    println(describe(2))

    println(describe("other"))

    }

    运行结果:

    One

    Greeting

    Long

    Not a string

    Unknown

    十一:使用区间(range)

    使用in运算符来检测某个数字是否在指定区间内:

    fun main(args: Array) {

    val x = 10

    val y = 9

    if (x in 1..y+1) {

    println("fits in range")

    }

    }

    运行结果:fits in range

    fun main(args: Array) {

    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")

    }

    }

    运行结果:

    -1 is out of range

    list size is out of valid list indices range too

    区间迭代:

    fun main(args: Array) {

    for (x in 1..5) {

    print(x)

    }

    }

    运行结果:
    12345

    数列迭代:

    fun main(args: Array) {

    for (x in 1..10 step 2) {

    print(x)

    }

    for (x in 9 downTo 0 step 3) {

    print(x)

    }

    }

    运行结果:

    135799

    630

    使用集合:

    fun main(args: Array) {

    val items = listOf("apple", "banana", "kiwi")

    for (item in items) {

    println(item)

    }

    }

    运行结果:

    apple

    banana

    kiwi

    使用in运算符来判断集合内是否包含某实例:

    fun main(args: Array) {

    val items = setOf("apple", "banana", "kiwi")

    when {

    "orange" in items -> println("juicy")

    "apple" in items -> println("apple is fine too")

    }

    }

    运行结果:

    apple is fine too

    十二:使用 lambda 表达式来过滤(filter)和映射(map)集合:

    fun main(args: Array) {

    val fruits = listOf("banana", "avocado", "apple", "kiwi")

    fruits

    .filter { it.startsWith("a") }

    .sortedBy { it }

    .map { it.toUpperCase() }

    .forEach { println(it) }

    }

    运行结果:

    APPLE

    AVOCADO

    以上是对Kotlin的基础语法做了一个基本的总结,后续会继续学习Kotlin的其他知识

    相关文章

      网友评论

      本文标题:Kotlin学习day01_基础语法

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