Kotlin基础
1.函数也是对象,可以作为参数和返回值
2.使用驼峰命名,尽量避免下划线
3.public函数应当有说明文档
4.lambda中花括号内前后都应该有空格
5.空值安全检查 var s: String? = null;当一个变量允许为空值时,必须使用?来声明
6.当?:左边表达式不为空时,返回表达式的值,否则执行?:右边表达式的值
7.as? 安全类型转换,转换失败会返回null
8.lambda表达式相当于一个函数 fun add(x :Int,y :Int) : Int = x + y
lambda可写成 val add(Int , Int) -> Int = { x , y -> x + y }
9.没有返回值的函数,显式指定Unit为返回值
10.is运算符来检查数据类型和类型转换
11.in操作符检查一个数是否在某个范围内
12.vararg 可变参数
13.$字符串模版
14.位运算符: or 或 / and 与 / shl有符号左移 / shr 有符号右移 / ushr 无符号右移 / xor 按位异或 / inv 按位取反
15.downTo 递减,循环可用,每次减1
16.step 步长 ,循环时可用,设置每次循环的增加或减少的量
17.when kotlin中增强版的switch,可以匹配值,范围,类型与参数
18.数据类型
Double 64
Float 32
Long 64
Int 32
Short 16
byte 8
①没有自动向上转型
②Long类型结尾必须是大写的L,不能为小写
③字符Char不是Number,用单引号来声明
④Boolean的值为true或false
⑤Kotlin不支持8进制, 十六进制0x开头,二进制0b开头
⑥位运算符
19.数组
Kotlin中使用Array类表示数组,需要注意一点:[]访问数组元素在这里实际上是进行了操作符的
创建数组:定长数组 val fixedSizeArray = arrayOfNulls<Int>(10)
空数组 val empty = emptyArray<Int>()
装箱操作 val arr = arrayOf(1,2,3) //还有其他比如 IntArrayOf,BooleanArrayOf
闭包初始化
访问数组:使用[]
遍历数组:for(i in array) print(i)
根据下标遍历:for(i in array.indices) print(array[i]) //indices 代表下标 !范围(0<=indices <数组size)
20.流程控制
Kotlin中的if-else: val min = if(a<b) a else b
val min = if(a<b) "a比较大“ else b
val min = if(a<b) "a比较大“ else Unit
在if语句块的最后可以自动返回最后一行表达式的值,而不需要写return
21.异常
Kotlin没有检验异常,它的throw和try都是表达式,意味着它们可以赋值给某个变量,这点在处理边界问题的时候很有用。
22.集合
跟据是否可变分为:不可变集合与可变集合,后者在前者的前面加上 Mutable
列表:List/ MutableList
集:Set/MutableSet
映射:Map/MutableMap
集合:Collection/MutableCollection
迭代器:Iterable/MutableIterable
list:
空List val emptyList = emptyList<String>()
普通List val list = listOf(1,2,3)
可修改的List val mList = mutableListOf(1,2,3)
Set:
空set val emptySet = emptySet<String>()
普通set val set = setOf(1,2,3)
可变的set val mSet = mutableSetOf(1,2,3)
HashSet val hashSet = hashSetOf(1,2,3)
LinkedSet val linkedSet = linkedSetOf(1,2,3)
SortedSet val sortedSet = sortedSetOf(1,2,3)
map:
这的键值对用 to 关键字 , key to value
空Map val emptyMap = emptyMap<Int,String>()
普通map val map = mapOf(1 to "coder",2 to "pig")
可变的map val mMap = mutableMapOf(1 to "coder",2 to "pig")
HashMap val hashMap = hashMapOf(1 to "coder",2 to "pig")
LinkedMap val linkedMap = linkedMapOf(1 to "coder",2 to "pig")
SortedMap val sortedMap = sortedMapOf(1 to "coder",2 to "pig")
23.强势的集合操作符
总数操作符、过滤操作符、映射操作符、顺序操作符、生产操作符、元素操作符
总数操作符:
any---判断集合中是否有满足条件的元素
all---判断集合中的元素是否都满足条件
none---判断集合是否都不满足条件,是则返回true
count---查询集合中满足条件的元素个数
reduce---从第一项到最后一项进行累计
reduceRight---从最后一项到第一项进行累计
fold---与reduce类似,不过有初始值,而不是从0开始累计
foldRight---和reduceRight类似,有初始值,而不是从0开始累计
forEach---循环遍历元素,元素是it,可对每个元素进行相关操作
forEachIndexed---循环遍历元素,同时得到元素index(下标)
max---查询最大的元素,如果没有则 返回null
maxBy---获取方法处理后返回结果最大值对应的哪个元素的初始值,如果没有则返回null
min---查询最小值
minBy---同maxBy
sumBy---获取方法处理后返回结果值的总和
dropWhile---返回从第一项起,去掉满足条件的元素,直到不满足条件的一项为止
过滤操作符:过滤后会返回一个处理后的列表结果,但不会改变原列表
filter---过滤掉所有满足条件的元素
filterNot---过滤所有不满足条件的元素
filterNotNull---过滤NULL
take---返回从第一个开始的n个元素
takeLast---返回从最后一个开始的n个元素
takeWhile---返回不满足条件的下标前面的所有元素的集合
drop---返回去掉前N个元素后的列表
dropLastWhile---返回从最后一项起,去掉满足条件的元素,直到不满足条件的一项为止
slice---过滤掉非指定下标的元素,即暴力下标对应的元素过滤list中指定下标的元素
映射操作符:
map---将集合中的元素通过某个方法转换后的结果存到一个集合中
mapIndexed---除了得到转换后的结果,还可以拿到index(下标)
mapNotNull---执行方法转换前过滤掉为Null的元素
flatMap---合并两个集合,可以在合并的时候做些小动作
groupBy---将集合中的元素按照某个条件分组,返回map
顺序操作符:
reversed---相反顺序
sorted---自然排序(升序)
sortedBy---根据方法处理结果进行自然排序
sortedDescending---降序排序
sortedByDescending---根据方法处理结果进行降序排序
生产操作符:
zip---两个集合按照下标组合成一个个的Pair塞到集合中返回
partition---根据判断条件是否成立,拆分成两个Pair
plus---合并两个list,可以用“+“替代
unzip---将包含多个Pair的List转换成含List的Pair
元素操作符:
contains---判断集合中是否有指定元素,有返回true
elementAt---查找下标对应的元素,如果下标越界会抛IndexOutOfBoundsException
elementAtOrElse---查找下标对应元素,如果越界会根据方法返回默认值
elementAtOrNull---查找下标对应元素,越界会返回Null
first---返回符合条件的第一个元素,没有抛NoSuchElementException
firstOrNull---返回符合条件的第一个元素,没有返回null
indexOf---返回指定下标的元素,没有返回-1
indexOfFirst---返回第一个符合条件的元素的下标,没有返回-1
indexOfLast---返回最后一个符合条件的元素下标,没有返回-1
last---返回符合条件的最后一个元素,没有抛NoSuchElementException
lastIndexOf---返回符合条件的最后一个元素,没有返回-1
lastOrNull---返回符合条件的最后一个元素,没有返回null
single---返回符合条件的单个元素,如果没有符合或超过一个,抛异常
singleOfNull---返回符合条件的单个元素,如果没有符合或超过一个,返回null
Kotlin基础的更多相关文章
- Kotlin基础篇(一)
写在前面: 因为工作需要,目前转安卓开发,用的IDE是AS3.2版本,语言的话,用的是Kotlin.由于之前是做.NET的,没接触过这方面的东西,所以完全是小白一枚.所以想着开个博客,以此来记录自己的 ...
- Kotlin基础(五)Kotlin的类型系统
Kotlin的类型系统 一.可空类型 //s为null的话编译器会报错,没问号不能为空 fun strLen(s : String)=s.length //如果允许s为空可: fun strLen2( ...
- Kotlin基础知识
1. 改进点/基础 //安全判空 val length = text?.length; //类型转换 if (object is Car) { var car = object as Ca } //操 ...
- Kotlin基础语法:变量、函数、类、枚举、控制流
一切都需要从基础学起! 前言: 在Kotlin语言中,没有分号的概念了,也就是每一行代码,都不在需要用分号结束了 点击查看代码 定义 常量:val --相当于java当中的final 变量:var 关 ...
- Kotlin基础特性深入讲解
继续学习基础语法,在上次https://www.cnblogs.com/webor2006/p/11183077.html中定义了一个两数相加的函数,如下: 其实对于这个函数还可以进一步简写,因为函数 ...
- Kotlin——基础的函数/方法详解
对于Kotlin中的函数来说,和JavaScript或者Lua这些语言很像,它有着这些语言的特性.但是也与这些语言就着许多不同之处.或许你更了解Java语言,然而对于Java语言来说,它不是不是闭包这 ...
- Kotlin基础语法学习
Kotline简介 Kotlin是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源.与Java相比,Kotlin的语法更简洁.更具表达性,而且提供了更多的特性,比如,高阶函 ...
- Kotlin基础(四)Lambda编程
Lambda编程 一.Lambda表达式和成员引用 一)Lambda表达式语法 //注意与Java8中的区别 val sum={ x:Int,y:Int -> x+y } println(sum ...
- Kotlin基础(三)类、对象和接口
类.对象和接口 一.定义类的继承结构 一)Kotlin中的接口 Kotlin的接口与Java8中相似,它们可以包含抽象方法的定义以及非抽象方法的实现,但它们不能包含任何状态. interface Cl ...
随机推荐
- goland 文件头自动注释
1 代码 /** * @Author: ${USER} * @Description: * @File: ${NAME} * @Version: 1.0.0 * @Date: ${DATE} ${TI ...
- JAVA 类的定义(定义一个类,来模拟“学生”)
package Code413;/*定义一个类,来模拟“学生”属性 (是什么) 姓名 年龄行为(能做什么) 吃饭 睡觉 学习对应到Java的类当中 成员变量(属性) String nanme; //姓 ...
- hostapd、/dev/random、/dev/urandom
在使用hostapd做软ap时,出现了random熵不够的问题,导致节点连接不上这个ap. 下面先解释一下/dev/random和/dev/urandom 先让我们从一个工程中遇到的实际问题开始,先上 ...
- Unity中各种格式计时器
问题背景: 在开发游戏过程中,很多地方需要倒计时,但是各种地方要的倒计时格式不同,倒计时都会写,在这里不详细介绍,写的目的就是为了记录一下,方便复用(为了在开发过程中不为了小问题浪费不必要脑细胞) 1 ...
- c博客作业--分支、顺序结构
1.本章学习总结 1.1思维导图 1.2本章学习体会及代码量学习体会 1.2.1学习体会 对于本章学习我感觉对代码有了初步的了解,一些简单的题目可以熟练掌握,但现在解决一道题目花的时间过多,不易发现那 ...
- 解决svn更新项目目录时“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was interrupted”的报错问题
今天在IDEA更新项目目录时,发现报错“Error:svn: E155037: Previous operation has not finished; run 'cleanup' if it was ...
- css3——border-image属性的用法
项目需求是实现鼠标移到按钮上时,下方显示一张渐变的三角图片,于是想到使用border-image来实现. 实现;//向外偏移10px,可使边框内部的内容不是那么紧凑border-image-repea ...
- 一个Tomcat下部署两个,甚至多个项目
是的這是我粘過來的 Tomcat目录下的结构如图: 第一步:Tomcat默认空间webapps,中已经存在一个项目了,此时要增加一个项目运行可以将原本webapps目录copa一份, 改名为webap ...
- JS截取页面,并保存到本地
想截取浏览器上内容,并做成图片保存到本地. 可以使用html2canvas.js进行操作. <!DOCTYPE html> <html lang="en"> ...
- Springboot @Transactional Mysql事务 无效
JPA默认创建的表是MyISAM引擎,MyISAM引擎不支持事务操作 所以需要将将数据库引擎改为InnoDB 配置修改 spring.jpa.database-platform=org.hiberna ...