Kotlin的when表达式

TextEngine 描述文字处理对象:

package cn.kotlin.kotlin_base02

/**
 * 描述文字处理对象
 *
 * val textContent 传入进来的文字内容 val是常量
 */
class TextEngine(val textContent: String) {

    /**
     * 处理文字,然后返回
     * 返回完整的字符串
     */
    fun getDoTextAction() : String {
        return """
               我来到一个非常美丽的公园,走着走着,就看到了${textContent}这个牌坊,这个牌坊中的${getTextContentCount(textContent)}个字是用漂亮的笔画写的
               """
    }

    /**
     * 把存入进来的textContent,转换成几个字
     * 返回字符串
     */
    private fun getTextContentCount(textContent: String): String {
        var result = when(textContent.length) {
            1 -> "一"
            2 -> "二"
            3 -> "三"
            4 -> "四"
            5 -> "五"
            6 -> "六"
            else -> {
                "" + textContent.length
            }
        }
        return result
    }

}

 

main测试方法:

package cn.kotlin.kotlin_base02

fun main(args: Array<String>) {

    var textEngine = TextEngine("皇后工天下")
    println(textEngine.getDoTextAction())

    var textEngine2 = TextEngine("风云帝王")
    println(textEngine2.getDoTextAction())

    var textEngine3 = TextEngine("阿巴黎大会公园")
    println(textEngine3.getDoTextAction())

    println("------------------------------------------------------")

    // -------------- when 的第一种用法
    when(130.88) {
        143.98 -> println("体重比较合格...")
        130.88 -> println("体重中规中矩....")
        100.32 -> println("体重轻了,太瘦了...")
        else -> println("体重数据未知...")
    }

    println("------------------------------------------------------")

    // -------------- when 的第二种用法
    when(3) {
        1 -> {
            println("我有三个人在给我干活....")
        }
        2 -> {
            println("我看到2个人在看电影...")
        }
        3 -> {
            println("三人行必有我吸烟....")
        }
        else -> println("没有人给我干活...")
    }

    println("------------------------------------------------------")

    // -------------- when 的第三种用法
    var perosnCount = 30
    var whenResult = when(perosnCount) {
        10 -> "这个工作室${perosnCount}个人"
        20 -> "这个工作室${perosnCount}个人"
        30 -> "这个工作室${perosnCount}个人"
        40 -> "这个工作室${perosnCount}个人"
        else -> "这个工作室 N个人在努力工作...."
    }
    println(whenResult)

    // when还有其他用法,暂未发现
    // ....
}

执行结果:

 

 




 

 

类型推断

类型推断是Kotlin内部自动处理的:

 

类型推断(注意:类型推断 变量和常量是一样的,只要是第一次赋值,就内部就认为第一次的类型变量类型)

定义一个常量/变量,赋值为字符串类型,Kotlin内部就已经认为此常量/变量是字符串类型了

 

package cn.kotlin.kotlin_base02

/**
 * 类型推断(注意:类型推断 变量和常量是一样的,只要是第一次赋值,就内部就认为第一此的类型变量类型)
 */
fun main(args: Array<String>) {

    /**
     * 定义一个常量,赋值为字符串类型,Kotlin内部就已经认为此aVal常量是字符串类型了
     */
    val aVal = "AAAAAAA"

    /**
     * 定义一个变量,赋值为字符串类型,Kotlin内部就已经认为此aVar变量是字符串类型了
     */
    var aVar = "ABCDEFT"

    // 在给aVar赋值为99,会报错,因为aVar已经是字符串类型了
    // aVar = 99


    /**
     * 定义一个变量,赋值为整形类型,Kotlin内部就已经认为此bVar变量是整形类型了
     */
    var bVar = 1000

    // 在给bVar赋值为ABCD,会报错,因为bVar已经是整形类型了
    // bVar = "ABCD"


    /**
     * 定义一个变量,赋值为浮点型类型,Kotlin内部就已经认为此cVar变量是浮点型类型了
     */
    var cVar = 988.22

    // 在给cVar赋值为100,会报错,因为cVar已经是浮点型类型了
    // cVar = 100


    // -----------------------
    /**
     * 以上没有指定变量类型,内部通过第一次赋值来决定类型的
     * 而以下代码是,指定变量类型
     */
    var zVar : String = "ABCDEF"
    var z2Var : Int = 10000
    var z3Var : Double = 564.45
    var z4Var : Float = 1000.37f
    // ...... 
}