Range与面向对象的Kotlin
在上一次https://www.cnblogs.com/webor2006/p/11186089.html中已经用到了范围相关的东东了,如下:

所以这次专门针对Koltin范围相关的东东再来细学一下,看在Kotlin中对于范围的表示有哪些其它的方式。
Range:
话不多说,直接开撸:

那如果要表示不在区域呢?

如果想打印2到10的数字,按照Java的通常做法就是用for循环来依次输出,在Kotlin中可以这样写:

另外还有一个等价写法:


那如果步长想要改成2,而不是一步步增长呢?很简单:

输出:

那如果想倒着来输出呢?也很简单:

字符串集合遍历:

接着来写这样个逻辑“如果发现world在集合中则打印一句话”,此时可以采用when来实现,如下:

接下来需求升级:“从集合中找到元素长度大于五,然后将符合的所有元素都转换成大写字母, 接着再按字母升序进行自然排序,最后将排序的结果输出到控制台上”,哇,条件好多,是的,就是为了操练,在Kotlin中如何搞呢?如果是用Java8的函数式很容易达到需求,这里Kotlin也是可以采用函数式编程,如下:




运行:

可见用了函数式编程写出来的代码可读性更加强,它跟Java8的函数式写法基本上类似。
字符串转义输出:
对于在字符串中想换行的话,需要使用"\n",如下:

但是!!有时候可能就想原封不动的将字符串输出,不想将“\n”进行转义,此时可以用“\\n”来将其输出出来,如下:

但是!!如果代码中有很多这样的不需要转义的字符那可能会让代码变得比较乱,两个双斜线比较晕,Kotlin有一种新的方式来解决不转义的问题,如下:

面向对象的Kotlin:
到目前为止,我们所撸的Kotlin的代码全是一个裸函数,没有编写过类,所以接下来得准备学习Kotlin面向对象相关的东东了,跟Java还是有非常大的不同的,需仔细的学一学,下面来定义一个Kotlin的空类:

貌似跟Java定义没啥区别嘛,其实本质上是完全不一样的,待之后不断深入学习再来体现它的不一样。在Kotlin中空类可以将花括号给省掉,变成如下:

是不是看着有点别扭,嗯,确实是跟Java不同,另外如果我们想定义一个public的类:

所以还是将public给去掉,另外还有一点细节跟Java不一样,就是类名可以跟文件名不一样,这在Java是不允许的,如下:

对于类中是有构造方法的,而在Kotlin中的构造方法的定义跟Java区别不是挺大的,规则是:“一个类可以有一个primary构造方法以及一个或多个secondary构造方法,primary构造方法是类头(class header)的一部分,它位于类名后面,可以拥有若干参数,如果primary构造方法没有任何注解或者可见性关键字修饰,那么constructor关键字可省略。”
我们知道在Java中构造方法是定义在类体中的,但是在Kotlin中不是的,下面咱们来定义一个带参数的构造方法:

其中根据“如果primary构造方法没有任何注解或者可见性关键字修饰,那么constructor关键字可省略”替则,很显然我们可以将constructor关键字给省掉,变成:

在Kotlin中primary构造方法是不能有任何代码的,那问题来了,构造方法不就是用来给类的成员进行赋初值的么?那在哪赋值呢?其实是有地方的,如下:

其中定义成员字段跟Java类似,可以直接用构造参数进行初始化,如下:

接下来用下该类:

对于Kotlin的构造方法的声明相比Java的来说确实是有点不适应,但是思考一下Kotlin的这个设计其实是更加合理的,为啥,因为构造方法本来就不是一个方法,不应该放在像Java那样跟普通方法放一起,有点歧义,所以需要适应Kotlin的这些改变。
Range与面向对象的Kotlin的更多相关文章
- 写给Android开发者的Kotlin入门
写给Android开发者的Kotlin入门 转 https://www.jianshu.com/p/bb53cba6c8f4 Google在今年的IO大会上宣布,将Android开发的官方语言更换为K ...
- Kotlin开发springboot项目(二)
Kotlin开发springboot项目(二) 中文学习网站: https://www.kotlincn.net/ 研究一下kotlin的demo: https://github.com/JetBra ...
- Kotlin介绍
Kotlin介绍 转 https://www.jianshu.com/p/d30406daaf25 Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Goo ...
- Kotlin教程
Kotlin是一种静态类型的编程语言,由JetBrains开发.如果你有Java的基础知识,你很快就能学会Kotlin.这个Kotlin教程是为初学者设计的,因此即使您不了解Java,也可以理解Kot ...
- 安卓开发(2)—— Kotlin语言概述
安卓开发(2)-- Kotlin语言概述 Android的官方文档都优先采用Kotlin语言了,学它来进行Android开发已经是一种大势所趋了. 这里只讲解部分的语法. 如何运行Kotlin代码 这 ...
- Kotlin——从无到有系列之中级篇(四):面向对象的特征与类(class)继承详解
如果您对Kotlin很有兴趣,或者很想学好这门语言,可以关注我的掘金,或者进入我的QQ群大家一起学习.进步. 欢迎各位大佬进群共同研究.探索 QQ群号:497071402 进入正题 在前面的章节中,详 ...
- Kotlin 区间和循环 Loop和Range
在kotln中有一种很简单的方式来表达某一个区间的数字. 比如我想存储1~100. 我在其他的语言中可以用数组,步骤大概有三个把. 但是在kotlin中就只需要一步. 代码如下: fun main(a ...
- python自动化--语言基础五面向对象、迭代器、range和切片的区分
面向对象 一.面向对象简单介绍: class Test(): #类的定义 car = "buick" #类变量,定义在类里方法外,可被对象直接调用,具有全局效果 def __ini ...
- Kotlin中Range与异常体系剖析
好用的集合扩展方法: 下面来看一下对于集合中好用的一些扩展方法,直接上代码: 如果我们想取出集合中的第一个值和最后一个值,用Java方式是get(0)和get(size-1),但是在Kotlin中提供 ...
随机推荐
- [LeetCode] 218. The Skyline Problem 天际线问题
A city's skyline is the outer contour of the silhouette formed by all the buildings in that city whe ...
- [LeetCode] 284. Peeking Iterator 瞥一眼迭代器
Given an Iterator class interface with methods: next() and hasNext(), design and implement a Peeking ...
- Kubernetes & Docker 容器网络终极之战(十四)
目录 一.单主机 Docker 网络通信 1.1.host 模式 1.2 Bridge 模式 1.3 Container 模式 1.4.None 模式 二.跨主机 Docker 网络通信分类 2.1 ...
- Kubernetes 控制器之 Service 讲解(七)
一.背景介绍 我们这里准备三台机器,一台master,两台node,采用kubeadm的方式进行安装的,安装过程大家可以参照我之前的博文. IP 角色 版本 192.168.1.200 master ...
- VS2019/VS2017设置默认管理员权限启动
找到vs安装目录下的:C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\devenv.exe 右键- ...
- 【神经网络与深度学习】【计算机视觉】YOLO2
YOLO2 转自:https://zhuanlan.zhihu.com/p/25167153?refer=xiaoleimlnote 本文是对 YOLO9000: Better, Faster, St ...
- springboot统一返回json数据格式并配置系统异常拦截
本文链接:https://blog.csdn.net/syystx/article/details/82870217通常进行前后端分离开发时我们需要定义统一的json数据交互格式并对系统未处理异常进行 ...
- 【原创】C++STL multiset
资料来源:官方文档 multiset是一个按照特定排序储存元素的容器,多个元素可以有相同的值.元素的值即为其本身的键值.multiset中的值无法修改,可插入删除.常用于实现二叉树. 定义一个mult ...
- JWT黑名单和白名单
单点登录系统 单点登录系统保存了用户的登录名和密码,上网用户在单点登录系统中认证成功后,就可以直接登录各个业务系统. 1. 用户使用单点登录系统的登录界面,输入用户名和密码登录成功后, 单点登录系统为 ...
- TiDB基本架构简单总结
TiDB特点 高可用 水平拓展 事务 SQL支持 TiDB架构 和MySql不同,TiDB是一个分布式的数据库而不是单个进程,所以整个TiDB是由以下角色组成: TiKV, PD, TiDB, T ...