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 // ...... }