Kotlin-2

字数 48阅读 23

1. 四种函数

package com.brain.day2

/**
 * 四种函数
 */
fun main(args: Array<String>) {
    saySomething()
    println(saySomethingAndReturnString())
    saySomethingAndInString("Jack")
    println(saySomethingAndInStringReturnString("Tim"))
}

/**
 * 没有参数无返回值
 */
fun saySomething() {
    println("Hello World")
}

/**
 * 无参数有返回值。
 */
fun saySomethingAndReturnString(): String {
    println("saySomethingAndReturnString")
    return "saySomethingAndReturnString"
}

/**
 * 有参数,有返回值。
 */
fun saySomethingAndInStringReturnString(name: String): String {
    println(name)
    return "You Name $name"
}

fun saySomethingAndInString(name: String) {
    println("You name : $name")
}

2. 字符串模版

package com.brain.day2

/**
 * 字符串模版
 * 格式 : "${变量}"
 * 如果是单独一个变量可以省略 “{}”
 */
fun main(args: Array<String>) {
    val i1 = 12
    val i2 = 13
    val name = "Jack"
    val age = 11

    println("My name is $name , My age is $age")
    println("i1 + i2 = ${i1 + i2}")
}

3. for循环

package com.brain.day2

/**
 * For循环
 */
fun main(args: Array<String>) {
    forInFunc()
    forEachFunc()
}

/**
 * 测试 for in
 */
fun forInFunc() {
    val text = "0123456789"
    // 1. 遍历所有的元素。
    print("所有的元素 : ")
    for (char in text) {
        print(" $char")
    }
    println()

    // 2. 带有下标的元素
    for ((index, char) in text.withIndex()) {
        print("text[${index}]=$char ")
    }
    println()
}

/**
 * 高级ForEach
 */
fun forEachFunc() {
    val text = "I am Jack"
    // 1. 没有index
    text.forEach {
        print("$it")
    }
    println()
    // 2. 有 index
    text.forEachIndexed { index, char ->
        print("$index : $char  ")
    }
    println()
}

4. 标签处返回

package com.brain.day2

/**
 * s1和s2两两组合有几种可能
 * 1. 在循环开始出使用 “label@” 设置标签。使用"break@label" 跳出循环
 */
fun main(args: Array<String>) {
    val text1 = "012345"
    val text2 = "012345"

    // 标签处跳转。
    label1@for (t1 in text1) {
        label2@for (t2 in text2) {
            if (t2 == '3') {
                break@label2
            }
        }
        if (t1 == '3') {
            break@label1
        }
    }
}

5. range区间

package com.brain.day2

/**
 * [1,100]  包含1 包含100
 * [1,100)  包含1 不包含100 最大99
 */
fun main(args: Array<String>) {

    //定义一个从1到100的数据类型
    //java定义数组 或者集合 添加元素
    val range = 1..100          // [1,100] 最大100
    val range1 = 1 until 100    // [1,100)  最大99
    val range2 = 10 downTo 1    // [10,1]
    val range3 = 'a'..'z'       // [a,z]
    val range4 = 'a' until 'z'  // [a,z]
    val longRange = 1L..100L    // [1, 100]

    println(range2.last)
    println(range1.last)

    // 区间的遍历可以采用For循环的任何一种形式。
    range.forEach {  }
    range.forEachIndexed { index, i ->  }
    for (r in range) {

    }
    for ((index, r) in range.withIndex()) {

    }

    // 区间翻转
    val reversed = range.reversed()
}

6. if语句

package com.brain.day2

/**
 * kotlin的if有返回值  {}最后一行为返回值
 */
fun main(args: Array<String>) {
    val b = 20
    val a = 15
    println(findBig0(a, b))
    println(findBig1(a, b))
    println(findBig2(a, b))
}

/**
 * 标准写法, 注意只有一行可以省略大括号。
 */
fun findBig0(a: Int, b: Int):Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

/**
 * 简化 1
 */
fun findBig1(a: Int, b: Int):Int {
    // 类似三木运算符
    if (a > b) return a else return b
}

/**
 * 简化 2
 */
fun findBig2(a: Int, b: Int):Int {
    return if (a > b) a else b
}




7. 数组

package com.brain.day2

/**
 * 相同数据类型元素的集合
*/
fun main(args: Array<String>) {
    arrayTypeFunc()
    accessArrayElements()
    modifyArrayElements()
}

/**
 * 数组元素的修改
 * 1. 下标
 * 2. set(index, value)
 */
fun modifyArrayElements() {
    //1. index
    val intArrayOf = intArrayOf(12, 13, 11)
    intArrayOf[0] = 0
    // set
    intArrayOf.set(1,1)

    println(intArrayOf[0])
    println(intArrayOf.get(1))
}

/**
 * 遍历数组可以使用For循环
 */
fun accessArrayElements() {
    val intArrayOf = intArrayOf(12, 11, 10)
    for (el in intArrayOf) {

    }

    for ((index, el) in intArrayOf.withIndex()) {

    }

    intArrayOf.forEach {  }
    intArrayOf.forEachIndexed { index, i ->  }
}

/**
 * 数组定义
 */
private fun arrayTypeFunc() {
    val arr = arrayOf(1, 2)
    //张三  李四  王五
    //定义数组保存三个姓名
    val array = arrayOf("张三", "李四", "王五")
    //Boolean
    //Byte
    //Char
    //Short
    //Int
    //Float
    //Double
    //Long
    val booleanArrayOf = booleanArrayOf(true, false, true, false)
    val byteArrayOf = byteArrayOf(0x00, 0x01)
    val charArrayOf = charArrayOf('a', 'z')
    val shortArrayOf = shortArrayOf(11, 12)
    val intArrayOf = intArrayOf(1, 2, 3)
    val floatArrayOf = floatArrayOf(12.11f, 13.11f)
    val doubleArrayOf = doubleArrayOf(12.11, 112.22)
    val longArrayOf = longArrayOf(12L, 12L)
}

8. when表达式

package com.brain.day2

/**
 * when分支判断语句
 * switch类似  char short int 枚举  字符串
 * when表达式可以支持任意类型以及条件
 */
fun main(args: Array<String>) {
    println(todo(12))
    println(todo1(8))
    println(todo3(2))
}

/**
 * 高级用法3 返回值
 */
fun todo3(age: Int): String {
    return when (age) {
        in 1..5 -> {
            "1..5"// 最后一行是返回之。
        }
        12 -> "12"
        else -> "else"
    }
}

/**
 * 高级用法2 不用参数
 */
fun todo2(age: Int): String {
    when {
        age == 12 -> return "12"
        age in 1..3 -> return "1..3"
        else -> return "else"
    }
}

/**
 * 高级用法1, 区间
 */
fun todo1(age: Int): String {
    when (age) {
        in 1..6 -> return "1~6"
        in 7..10 -> return "7~10"
        12,13 -> return "12,13"
        14 -> return "14"
        else -> return "else"
    }
}

/**
 * 基础用法
 */
fun todo(age:Int):String{
    when(age) {
        7 -> return "开始上小学了"  //如果只有一行可以省略{}

        12 -> {
            return "开始上中学了"
        }
        15 -> {
            return "开始上高中了"
        }
        18 -> {
            return "开始上大学了"
        }
        else -> {
            return "开始上社会大学"
        }
    }
}

9. 函数表达式

package com.brain.day2

/**
 * kotlin 函数和对象都是一等公民  平等的
 */
fun main(args: Array<String>) {
    println(add0(1, 1))
    println(add1(1, 1))
    println(add2(1, 1))

    // 具名参数。
    println(add3(b = 22))
    // 可变参数
    println(add4(1, 2, 3, 4))

}

/**
 * 具名参数 : 指定要赋值的参数
 */
fun addFunc0() {
    add0(12, b = 12)
}

//----------------- 格式

/**
 * 标准
 */
fun add0(a: Int, b: Int):Int {
    return a + b
}

/**
 * 高级1 : 如果只有一行代码,可以省略大括号。
 */
fun add1(a: Int, b: Int): Int = a + b

/**
 * 高级2 : 返回值也可以省略
 */
fun add2(a: Int, b: Int) = a + b

/**
 * 默认参数
 */
fun add3(a: Int = 12, b: Int) = a + b

/**
 * 可变参数
 */
fun add4(vararg params: Int): Int {
    var sum = 0
    params.forEach {
        sum += it
    }
    return sum
}

10. 异常处理

package com.brain.day2

/**
 * 异常处理
 */
fun main(args: Array<String>) {
    val a = 1
    val b = 0
    try {
        // 发生异常了。
        val c = a / b//ArithmeticException   分母为0
    } catch (e: Exception) {
        println("捕获到异常了")
    }finally {
        println("都会执行的")
    }
}

推荐阅读更多精彩内容