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] 237. Delete Node in a Linked List 删除链表的节点
Write a function to delete a node (except the tail) in a singly linked list, given only access to th ...
- Java设计模式之:单例模式
单例模式 建议实现方式:枚举方式实现单例 单例模式的定义 单例模式就是在程序运行中只实例化一次,创建一个全局唯一对象,有点像 Java 的静态变量,但是单例模式要优于静态变量,静态变量在程序启动的时候 ...
- python:连接Oracle数据库后控制台打印中文为??
打印查询结果,中文显示为了??? [('72H FCR', '2.0'), ('?????', '8.0')] E:\Python35\Lib\site-packages中新增文件: sitecust ...
- 微信小程序 与后台交互----获取服务器时间
index.wxml代码 <!--index.wxml--> <view class="container"> <text>{{date}}&l ...
- 整理通常的SQL SERVER优化流程
1.SQL脚本或存储过程,跟踪存储过程的执行时长和reads,不正常的情况下,表明语句.存储过程有优化空间,通常是未加索引,或者索引的字段升降序进行调用: A:脚本是否需要新增或复用现有索引: B:脚 ...
- [转帖]Linux教程(13)- Linux中的通配符和正则表达式
Linux教程(13)- Linux中的通配符和正则表达式 2018-08-22 06:16:44 钱婷婷 阅读数 39更多 分类专栏: Linux教程与操作 Linux教程与使用 版权声明:本文 ...
- 封装关于金额计算的double工具类
由于直接使用double类型的加减乘除,可能会出现不可预测的问题,精度丢失等等.在业务中,计算金额是一件很重要的事情. 可以直接使用BigDecimal类,进行加减乘除.相关BigDecimal类介绍 ...
- SQL学习-SQL Server
- JDK8-lambda表达式以及接口可以定义默认方法
一.Lambda表达式 1.Lamdba Lambda 允许把函数作为一个方法的参数,使用Lamdba可以让开发的代码更加简洁,但是易读性差,新人不了解Lamdba表达式或者代码功底有点差,不容易读懂 ...
- JDBC使用8.0驱动包连接mysql设置时区serverTimezone
驱动包用的是新版 mysql-connector-java-8.0.16.jar新版的驱动类改成了com.mysql.cj.jdbc.Driver新版驱动连接url也有所改动I.指定时区 如果不设置时 ...