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] 309. Best Time to Buy and Sell Stock with Cooldown 买卖股票的最佳时间有冷却期
Say you have an array for which the ith element is the price of a given stock on day i. Design an al ...
- CF1260D A Game with Traps
http://codeforces.com/problemset/problem/1260/D 首先很明显可以想到二分答案,把能力值数组排个序就好. 考虑怎么check. 设当前二分值为w,即不能直接 ...
- web版本的用户登陆票据 FormsAuthenticationTicket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, "username", DateTime.N ...
- 【LeetCode】整数反转【不能借助辅助空间,需要处理溢出】
给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转. 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: ...
- [转帖]Redis、Memcache和MongoDB的区别
Redis.Memcache和MongoDB的区别 https://www.cnblogs.com/tuyile006/p/6382062.html >>Memcached Memcach ...
- Delphi Sysem.JSON 链式写法
链式写法有很多优点:连贯.语意集中.简洁.一气呵成.可读性强.比如要把 3.1415926 中的 59 提取为一个整数:Pi.ToString().Substring(5,2).ToInteger() ...
- linux 系统扩容 VMware Centos---VMware ESXi
用到的命令 df fdisk pvcreate pvdisplay vgdisplay vgextend lvdisplay lvextend resize2fs 0 ...
- UI测试用例设计,场景测试法
百度一番,没有发现详细的UI测试用例设计方法,只能自己整理一下,学习.改进. 那么正题来了,我们慢慢缕下思路: 1.整理要测实体中的,处理逻辑.触发规则.动作. 2.将场景测试抽象出来 3.到这个时候 ...
- JAVA的枚举基本操作,对原码反码补码的理解及为运算的深入理解,浮点数计算的误差分析
①深入浅出的了解枚举类型 先看一段代码: enum Size{SMALL,MEDIUM,LARGE}; public class EnumTest { public static void main( ...
- 和我一起,重零开始学习Ant Design Pro开发解决方案(一)安装开发环境
安装NODEJS 什么是NODEJS? 百度一下吧,这个真不知道,老码农,别笑话我: 简单的说 Node.js 就是运行在服务端的 JavaScript.Node.js 是一个基于Chrome Jav ...