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

Android-Kotlin-when&类型推断的更多相关文章

  1. C++11特性——变量部分(using类型别名、constexpr常量表达式、auto类型推断、nullptr空指针等)

    #include <iostream> using namespace std; int main() { using cullptr = const unsigned long long ...

  2. TypeScript Type Innference(类型推断)

    在这一节,我们将介绍TypeScript中的类型推断.我们将会讨论类型推断需要在何处用到以及如何推断. 基础 在TypeScript中,在几个没有明确指定类型注释的地方将会使用类型推断来提供类型信息. ...

  3. android:inputType参数类型说明

    android:inputType参数类型说明 android:inputType="none"--输入普通字符 android:inputType="text" ...

  4. Xamarin.Android编译CPU类型选择方式

    Xamarin.Android编译CPU类型选择方式 在Xamarin.Android编译的时候,默认提供了5种CPU类型供大家选择.它们分别为armeabi.armeabi-v7a.arm64-v8 ...

  5. C++11新特性:自动类型推断和类型获取

    声明:本文是在Alex Allain的文章http://www.cprogramming.com/c++11/c++11-auto-decltype-return-value-after-functi ...

  6. WebKit Web Inspector增加覆盖率分析和类型推断功能

    WebKit中的Web Inspector(Web检查器)主要用于查看页面源代码.实时DOM层次结构.脚本调试.数据收集等,日前增加了两个十分有用的新功能:覆盖率分析和类型推断.覆盖率分析工具能够可视 ...

  7. [Effective Modern C++] Item 2. Understand auto type deduction - 了解auto类型推断

    条款二 了解auto类型推断 基础知识 除了一处例外,auto的类型推断与template一样.存在一个直接的从template类型推断到auto类型推断的映射 三类情况下的推断如下所示: // ca ...

  8. [Effective Modern C++] Item 1. Understand template type deduction - 了解模板类型推断

    条款一 了解模板类型推断 基本情况 首先定义函数模板和函数调用的形式如下,在编译期间,编译器推断T和ParamType的类型,两者基本不相同,因为ParamType常常包含const.引用等修饰符 t ...

  9. c# in depth 之泛型实参的类型推断

    调用泛型方法时,指定类型实参常常会显得很多余.为简化工作,c#2编译器被赋予了一定的“智能”,让你在调用方法时,不需要显式声明类型实参. 在深入讨论这个主题之前,必须强调一下:类型推断只适用于泛型方法 ...

随机推荐

  1. R语言读取Hive数据表

    R通过RJDBC包连接Hive 目前Hive集群是可以通过跳板机来访问 HiveServer, 将Hive 中的批量数据读入R环境,并进行后续的模型和算法运算. 1. 登录跳板机后需要首先在Linux ...

  2. Luogu2161 [SHOI2009]会场预约-线段树

    Solution 线段树维护 sum 表示区间内预约个数, L 表示区间最左边的预约, R 表示区间最右边的预约. $pushup$ 就是这样 : void up(int nd) { sum[nd] ...

  3. ubuntu12.04下安装Apache+PHP+MySQL

    一.Apache1.安装apache2: sudo apt-get install apache2 2.重启apache2: sudo /etc/init.d/apache2 restart 3.在浏 ...

  4. 测试 Open Live Writer

    我要试试. 看看图片如何: 这是从电脑端上传的一个例子,如果编辑器里可以支持复制粘贴图片就好了. Open Live Writer 发布以后,还可在保存在本地,想起来的时候就修改一下. 再美化一下. ...

  5. 基于centos6.5 hadoop 集群搭建

    1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机等) /etc/hosts里面要配置 ...

  6. .NET获取城市信息(将三字代码转换成城市名)

    整理代码,发现有一个从两张表里读取城市列表,然后linq和lambda表达式来获取城市名的函数,代码如下: public static string GetCityHotelText(string c ...

  7. rails 数据迁移出问题

    数据migrate重置 rails db:migrate:reset 具体的,,还不清楚,想起来了再去补充

  8. 2018.10.27 bzoj1984: 月下“毛景树”(树链剖分)

    传送门 唉蒟蒻又退化了,这道sb题居然做了20min,最后发现是updcovupdcovupdcov写成了updaddupdaddupdadd我还能说什么233233233 就是让你转边权为点权之后, ...

  9. C#中string类型是值类型还是引用类型?(转)

    出处:https://www.cnblogs.com/dxxzst/p/8488567.html .Net框架程序设计(修订版)中有这样一段描述:String类型直接继承自Object,这使得它成为一 ...

  10. (16)The beauty of what we'll never know

    https://www.ted.com/talks/pico_iyer_the_beauty_of_what_we_ll_never_know/transcript 00:13One hot Octo ...