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. Mybatlis SQL 注入与防范

    SQL注射原理 所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令 ...

  2. JSP动作

    JSP动作元素在请求处理阶段起作用,他们会被转换成Java代码来执行操作,如访问一个Java对象或调用方法. JSP动作元素是用XML语法写成的. 动作元素基本上都是预定义的函数,JSP规范定义了一系 ...

  3. Spring 是如何解析泛型 - ResolvalbeType

    Spring 是如何解析泛型 - ResolvalbeType Spring 系列目录(https://www.cnblogs.com/binarylei/p/10198698.html) Java ...

  4. Vue 使用中的小技巧

    在vue的使用过程中会遇到各种场景,当普通使用时觉得没什么,但是或许优化一下可以更高效更优美的进行开发.下面有一些我在日常开发的时候用到的小技巧,在下将不定期更新~ 1.多图表resize事件去中心化 ...

  5. windows 下设置nginx负载均衡

    #user nobody; worker_processes ; #error_log logs/error.log; #error_log logs/error.log notice; #error ...

  6. UD系统主定制界面

  7. 【WebService】WebService基础知识(一)

    WebService是什么? 1. 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 2. 一个跨语言.跨平台的规范(抽象) 3. 多个跨平台.跨语言的应用间通信整合的方案(实际) ...

  8. TryXXX模式(深入理解c#)

    .NET有几个模式很容易根据所涉及的方法名称来识别.例如,BeginXXX和EndXXX暗示着一个异步操作.TryXXX模式的用途在.net1.1升级到2.0期间进行了扩展.他是针对以下情况设计的:有 ...

  9. TP5在lnmp环境中不能重写的问题

    说到坑,这个问题困扰了我一两天时间,本地可以,线上环境检查了好久. 基本检查的地方有几个了,首先就是nginx下面的重写配置,这个大家在网上都能搜到,至于定义的变量和配置路径,修改一下即可. 还有就是 ...

  10. 1-9-假期训练心得(dp+bfs)

    题目一:传送门 思路:就是简单的bfs,注意仔细审题,加上对转弯次数的判断. 题目二:传送门 思路:简单dp,记录每一秒每个位置接到的大饼的数量. 状态转移方程:dp[i][j]=max(dp[i][ ...