Kotlin-2

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("都会执行的")
    }
}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容