Kotlin编译器优化与when关键字详解
Any类型:
定义一个函数,其参数接受所有类型,对于Java而言Object是所有类的基类,而在Kotlin中得用Any关键字,如下:

其中瞅一下该Any字段是个啥类型:

然后里面做一些判断:

这是因为Kotlin自动的将str转换成了String了,因为有了条件类型的判断了,如下:

我们知道如果换成是Java,代码肯定得这样写:

很明显可以看到Kotlin更加的智能,对于Java明显显得有点麻烦,好,接下来调用一下,这里有个小技巧,对于我们Java而言如果在IDE中敲sout就可以快速的打出Sytem.out.println(),而其实对于Kotlin中也可以用sout这个快捷方式打出println(),如下:

接下来调用一下:

数组相关:

而其实类型声明可以去掉,因为可以类型推断出来:

接着来看一下intArrayOf的官方说明:

所以可以看到就是一个Int类型的数组,对于Kotlin的Int目前已经使用比较多了,有必要对它进一步了解,跟进去瞅下它到底是啥?

是一个Int的类,另外IntArray类型也再瞅一下:

好接下来则遍历一下数组,有几种方式,之前也已经使用过了,如下:

其中由于有类型推断,所以这块类型声明可以去掉:


接着换一种方式,可以遍历数组的下标,也是Kotlin提供的一个方便的方式,如下:

最后还有一种方式,同时可以遍历元素和索引:

when关键字:
它的应用场景是非常多的,跟Java的if...else if...或switch..case的作用差不多,下面编写一个函数,来完成这样的一个功能:如果传给函数的参数是“hello”,则会转换成“HELLO”返回,而如果传的是“world”则会转换成“WORLD”返回,而如果是传的是“hello world”则会转换成“HELLO WORLD”返回,而如果是其它的字符串则直接“other input”,对于Java来实现这个需求那是非常简单的,但是在Kotlin中如何利用when关键字来实现呢,如下:

其实它还有更加精简的写法,IDE已经给出提示了:

可以用IDE的提示:


下面来调用一下:

其实。。程序还可以继续简化,因为咱们目前这个函数体就只有一个when表达式,其实是可以直接给函数赋值的,如下:

另外继续来用下when:

那,如果a要在一个范围内来匹配,而不是只匹配一个值该怎么弄呢?

那如果还要匹配更多的值呢?

其中看一下细节,对于这个“..”查看它的定义,其实会看到是它:

好,另外目前程序还是报错的,如下:

所以:


该关键字在实际开发中是非常常用的,所以需要好好消化。
Kotlin编译器优化与when关键字详解的更多相关文章
- 【转载】C/C++中extern关键字详解
1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...
- Java面试题04-final关键字详解
Java面试题04-final关键字详解 本篇博客将会讨论java中final关键字的含义,以及final用在什么地方,感觉看书总会有一些模糊,而且解释的不是很清楚,在此做个总结,以备准备面试的时候查 ...
- Objective-C 实用关键字详解1「面试、工作」看我就 🐒 了 ^_^.
在写项目 或 阅读别人的代码(一些优秀的源码)中,总能发现一些常见的关键字,随着编程经验的积累大部分还是知道是什么意思 的. 相信很多开发者跟我当初一样,只是基本的常用关键字定义属性会使用,但在关键字 ...
- loadrunner 脚本优化-关联函数web_reg_save_param()函数详解
脚本优化-关联函数web_reg_save_param()函数详解 by:授客 QQ:1033553122 Insert->New Step,打开Add Step对话框 选择函数web_re ...
- Delphi、Lazarus保留字、关键字详解
Delphi.Lazarus保留字.关键字详解 来自橙子,万一的博客以及其他地方 保留字:变量等标识符可以再使用: 关键字:有特定含义,不能再次重新定义: 修饰字:类似保留字的功能,也就是说可以重用 ...
- java关键字(详解)
目录 1. 基本类型 1) boolean 布尔型 2) byte 字节型 3) char 字符型 4) double 双精度 5) float 浮点 6) int 整型 7) long 长整型 8) ...
- Delphi 关键字详解
Delphi 关键字详解[整理于 "橙子" 的帖子] absolute //它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同. var Str: ]; S ...
- python关键字详解
今天依旧在啃:<笨方法学python>,其中习题37是复习各种关键字.我本想百度一下记一下就ok了,但是百度出来第一个就Hongten的博客.我才意识到我也有博客,我应该学习他,把这些积累 ...
- Tomcat 优化方案 和 配置详解(转)
转自 Tomcat 优化方案 和 配置详解 http://201605130349.iteye.com/blog/2298985 Server.xml配置文件用于对整个容器进行相关的配置. <S ...
随机推荐
- [LeetCode] 168. Excel Sheet Column Title 求Excel表列名称
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For exa ...
- .Net Core 1.1 + CentOs 7 环境配置
centos7下使用yum安装mysql5.7.10 参考:http://www.cnblogs.com/hwd-cnblogs/p/5213337.html http://www.jb51.net/ ...
- 分布式唯一ID生成常用方案
1. 使用JAVA的UUID生成 算法的核心思想是结合机器的网卡.当地时间.一个随记数来生成UUID. 优点:本地生成,生成简单,性能好,没有高可用风险 缺点:长度过长,字母和数字组合,存储冗余,且无 ...
- win10 双网卡设置内网和外网同时访问
当前环境是内网使用固定ip 用有线连接 外网自动获取使用wifi模块连接wifi cmd窗口下运行route print -4 打印路由信息 首先删除 所有0.0.0.0的路由,也就是默认设置 rou ...
- Spring中的常用注解
Spring中的常用注解 1.@Controller 标识一个该类是Spring MVC controller处理器,用来创建处理http请求的对象.
- LeetCode 704. 二分查找(Binary Search)
704. 二分查找 704. Binary Search 题目描述 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,写一个函数搜索 nums 中的 target,如果 ...
- 【LeetCode】删除链表的倒数第N个节点【双指针法】
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点. 示例: 给定一个链表: 1->2->3->4->5, 和 n = 2. 当删除了倒数第二个节点后,链表变为 ...
- 嵌入式02 STM32 实验01 端口复用和重映射
内设与外设: 端口复用和端口重映射都需要了解内设和外设,那么什么是内设?什么是外设? 内设:单片机内部集成的功能一般包括:串口模块.SPI模块(Serial Peripheral Interface ...
- 升级nginx1.12为1.161版本
升级nginx1.12为1.161版本 一.添加源 到 cd /etc/yum.repos.d/ 目录下 新建nginx.repo 文件 vim nginx.repo 输入以下信息 [nginx-st ...
- Asp.net Core CORS 跨域
本文主要介绍在Asp.net Core采用CORS方式解决跨域 关于跨域的原理介绍可参考Asp.net Web API 解决跨域详解 1 在Startup添加允许跨域的策略 services.AddC ...