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中提供 ...
随机推荐
- maven项目打包跳过单元测试
在pom.xml中添加一下代码: <plugin> <groupId>org.apache.maven.plugins</groupId> <artifact ...
- Graphviz(01) notepad++ Run xxx.gv
1.新建文件dot.bat 放到 d:\,内容如下: set gvname=%% @echo '"d:\dot.bat" "$(FULL_CURRENT_PATH)&qu ...
- 【视频开发】CximageMat 、CximagelplImage 以及 lplImageMat的转换、像素位深度
1.传统的lplImage * -------> Mat格式 IplImage* img = cvLoadImage("greatwave.png", 1); Mat mtx ...
- 【视频开发】【计算机视觉】doppia编译之一:前言及安装CUDA
最近做一个"高清视频人流量检测"的项目,由于对实时性要求较高,我们需要较快的检测速度.在搜索茫茫"论"海后,我在"The Fastest Deform ...
- 在使用FPGA来控制DDR3/DDR2 IP 的时候两个错误的解决办法
对于熟悉Intel FPGA的老(gong)司(cheng)机(shi)来说,外部存储器的控制早已是轻车熟路,但是对于新手,DDR3/DDR2 的IP使用也许并没有那么简单,不过没关系,骏龙的培训网站 ...
- 【翻译】在GitHub上通过星级评估排名前10的最受欢迎的开源Delphi项目
GitHub上有相当多的Delphi开源项目可以为你节省一些时间.我在GitHub上搜索了Delphi,然后按最主要的项目进行排序,并列出了前十名单.这里有一些非常好的东西,包括Awesome Del ...
- 用python写一个简单的文件上传
用Pycharm创建一个django项目.目录如下: <!DOCTYPE html> <html lang="en"> <head> <m ...
- 使用VS Code快速编写HTML
VS Code 有自动补全HTML代码方法体的功能 1.打开VS Code并新建文件,点击底部右侧语言模式选项,默认为纯文本(plaintext),将其改为HTML. 2.在空文件第一行输入”!“,光 ...
- Serializer组件
Serializer组件 一 .序列化器-Serializer 作用: 序列化,序列化器会把模型对象转换成字典,经过response以后变成json字符串 反序列化,把客户端发送过来的数据,经过req ...
- Roads in the Kingdom CodeForces - 835F (直径)
大意: 给定一个基环树, 求删除一条环上的边使得直径最小. 直径分两种情况 环上点延伸的树内的直径 两个环上点的树内深度最大的点匹配 第一种情况直接树形dp求一下, 第二种情况枚举删除的环边, 线段树 ...