Kotlin学习-基础知识点
一:基础要点
//常量定义 val
val arg_a1: Int = 1
//变量定义var
var arg_a2 = 5 // 系统自动推断变量类型为Int
备注:kotlin 定义变量必须给定初始值,如延迟初始值,需要特殊声明!
空对象处理
//可null对象声明
//类型后面加?表示可为空var agrs_t: String? = null
//抛出空指针异常val v1 = agrs_t!!.toInt()
//不做处理返回 null //the safe call operator, written ?.val v2 = agrs_t?.toLong()
//age为空时返回-1, 非空正常执行val v3 = agrs_t?.toInt() ?: -1
//显示判断处理val l: Int = if (b != null) b.length else -1val b: String? = "Kotlin"if (b != null && b.length > 0) {print("String of length ${b.length}")} else {print("Empty string")}//安全处理符处理
//the safe call operator, written ?.val lt = b?.length ?: -1//为空为-1val files = File("Test").listFiles()println(files?.size ?:"empty")
类型判断及转化
//类型判断,如果为String类型,则自动转为String
if (obj is String) {
print(obj.length)
}
// 非此类型判断,same as !(obj is String)
if (obj !is String) {
print("Not a String")
}
//可null类型转化
val x: String? = y as String?
//非null转化
//null cannot be cast to String as this type is not nullable,
val x2: String = y as String
equels与引用比较:
两个对象内容比较(Java中的equels)==两个等号代表
两个引用比较使用===三个等号代表
Equality checks: a == b ,!==
Referential equality: a === b
this关键字引用含义
class A { // implicit label @Ainner class B { // implicit label @Bfun Int.foo() { // implicit label @fooval a = this@A // A's thisval b = this@B // B's thisval c = this // foo()'s receiver, an Intval c1 = this@foo // foo()'s receiver, an Intval funLit = lambda@ fun String.() {val d = this // funLit's receiver}val funLit2 = { s: String ->// foo()'s receiver, since enclosing lambda expression// doesn't have any receiverval d1 = this}}}
}
说明:
1,this默认不加标签,如在类的成员内,标识当前类对象,在成员函数或扩展函数内部则this代表的是接受者类型对象(如变量c,c1代表作用对象Int)
2,this加上@对应类名称代表指定类对象引用,如a,b
函数定义
//返回值函数
fun sum(a: Int, b: Int): Int {
return a+b
}
//无返回值
fun getHello(){
//......
}
//不定参数定义函数
fun varsFor(vararg v:Int){//变长参数 vararg
for(vt in v){
print(vt)
}
}
//函数返回可null类型
fun getStringLength(obj: Any): Int? {
// `obj` 的类型会被自动转换为 `String`
if (obj is String && obj.length > 0)
return obj.length
return null // 这里的obj仍然是Any类型
}
//函数作为参数传递
fun testHandleMethodParams(){val strSample = "handle filter"val tvalue = transformResult (strSample){//函数作为参数getParams(strSample)}}fun getParams(str1: String): Int = str1.length/*** arg0 为实参* p1 为形参,内部无法引用* ->函数返回值*/fun <T, R> transformResult(args:T,transform: (T) -> R): R {return transform(args)}
/*** 此方法接收一个无参数的函数并且无返回,Unit表示无返回*/private fun getResults(method: () -> Unit) {method()}
数组类型
//默认值初始化 [1,2,3]
val a = arrayOf(1, 2, 3)
//表达式初始化
val b = Array(3, { i -> (i * 2) })
//指定元素个数,空元素数组初始化
var attr = arrayOfNulls<String>(5)
attr[1] = "11"
attr[2] = "22"
数组遍历
fun vForArray(array: Array<Int>){
//withIndex 函数 index value 一对同时遍历
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
}
//索引遍历
for (i in array.indices) {
print(array[i])
}
//值遍历
for(v in array){
print("$v \t")
}
}
集合类型 分为可变和不可变集合
1,集合类型包含三种类型:它们分别是:List、Set、Map
2,三种集合类型分别对应MutableList<E>、MutableSet<E>、MutableMap<K,V>接口
//List 创建
val list1 = listOf(1,2,"3",true) // 不定类型创建
val list2 = listOf<String>("1","2","3") // 确定元素类型
val list3 = listOf(a)// 使用数组创建
//备注:List一旦创建不可修改,add set remove不可操作
//mutableList 创建
val mutaList1 = mutableListOf<String>("1","2","3")
val mutaList2 = mutableListOf(a)
mutaList1.add("11")
mutaList1.removeAt(2)
mutaList1.set(0,"mm")
集合常用函数
fun listOperate(){val items = listOf(1, 2, 3, 4)items.first() //== 1items.last() //== 4val subItems = items.filter { it % 2 == 0 } // returns [2, 4]var sub2 = items.slice(1..3)var sub3 =items.filterNot { it>100 }//高阶函数//遍历listitems.forEach{
// it= it*2+1print(it)}items.forEachIndexed { index, value -> if (value > 8) println("value of index $index is $value") }//T->R 集合中的元素通过某个方法转换后的结果存到一个集合val list11 = items.map { (it - 2+1).toLong() }val list111 = items.mapIndexed { index, it -> if(index>5) 10 * it }//合并两个集合
// items.flatMap { listOf(it, it + 1) }// map:遍历每一个元素
// flatMap:遍历每一个元素,并铺平(展开内部嵌套结构)元素var list_map = listOf(listOf(10,20),listOf(30,40),listOf(50,60))var mapList = list_map.map{ element -> element.toString() }var flatMapList = list_map.flatMap{ element -> element.asIterable() }
// map [[10, 20], [30, 40], [50, 60]]
// flatmap [10, 20, 30, 40, 50, 60]// filter all 符合条件elementval list12 = items.filter { mypre(it) }//filter 到第一个不符合条件元素返回,后面不再过滤val list13 = items.takeWhile { (it%2!=0) }//提取前3个元素val list14 = items.take(3)//提取后3个val list15 = items.takeLast(3)//去除重复元素var list16 = items.distinct()//指定key过滤条件var list17 = items.distinctBy { it*101+100 }
// list1.fold(5,operation = )//匹配交集元素var list18 = items.intersect(listOf<Int>(2,3,4))//匹配两个集合内所以不同元素,差集合var list19 = items.union(listOf<Int>(2,3,4))//返回匹配条件元素var list21 = items.any { (it in 10..20) }var list22 = items.count { it >20 }//初始值,累计计算处理var list23 = items.fold(10) { total, next -> total + next }var list24 =items.reduce { total, next -> total - next }var sumFilterResult : Int = 0items.filter { it < 7 }.forEach { sumFilterResult += it }val rwList = mutableListOf(1, 2, 3)// 去除null元素rwList.requireNoNulls() //returns [1, 2, 3]//检测list内有符合条件元素if (rwList.none { it > 6 }) println("No items above 6") // prints "No items above 6"//第一个元素,或为空对象val item = rwList.firstOrNull()}fun mypre(t:Int): Boolean{ return t%2==0}
转载于:https://www.cnblogs.com/happyxiaoyu02/p/9953689.html
Kotlin学习-基础知识点相关推荐
- FPGA硬件学习基础知识点总结(1)
FPGA硬件学习基础知识点总结(1)锁存器与触发器 总结一下数电,FPGA的一些基础知识,涉及到硬件电路的设计.主要是记录自己的学习过程. 锁存器与触发器 锁存器(latch):锁存器是电平触发的存储 ...
- 深度学习基础知识点【更新中】
深度学习基础知识点 文章目录 深度学习基础知识点 1. 数据归一化 2. 数据集划分 3. 混淆矩阵 4. 模型文件 5. 权重矩阵初始化 6. 激活函数 7. 模型拟合 8. 卷积操作 9. 池化操 ...
- java 学习基础知识点拾遗 导航页
每种编程语言的知识点都是很多很杂的,java也是如此 相信很多人学习的过程中都是深一脚浅一脚,最基础的东西可能有些也不是非常确定 整理了最基本的一些知识点,可以说是java入门的-1层级别的,作为自己 ...
- 深度学习基础知识点归纳总结
1. 最小化代价函数优化方法:BGD.SGD.MBGD.动量.NAG.Adagrad.AdaDelta.Adam.AMSGrad.牛顿法: 2. 前馈神经网络的隐藏单元不一定在所有的输入点上可微: 3 ...
- 深度学习基础知识每日更 upupup
深度学习基础知识点总结 提示:菜鸟入门日记,若总结有错误,各路大佬多多指教! 文章目录 深度学习基础知识点总结 Looking for my friends 一.零散知识点 1.网络拼接和相加的区别 ...
- Java入门基础知识点整理大放送,推荐保存
为了方便大家学习Java,理顺Java技术知识点,也可以助您尽快的努力成长起来,小编整理了以下Java入门基础知识,一起来学习吧! 一.概述 1991年Sun公司的James Gosling等人开始开 ...
- Kotlin学习笔记 第一章开始 第二章 基础
参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 本系列为参考Kotlin中文文档 https://download.csdn.net/dow ...
- 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点
转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...
- 深度学习tensorflow数据流图基础知识点
一.深度学习与机器学习区别 (一)特征提取方面 1.机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识 深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,通过将数 据从一层传 ...
最新文章
- 修改服务器端的访问模式,ftp服务器端 修改主动模式
- 关于深度学习的小知识点
- 检查字符串是否为有效URL的最佳正则表达式是什么?
- 现金流量表整理及开发
- python中的cli模块_Python 快速实现CLI 应用程序的脚手架
- php7版本搭建sqli labs,CentOS 7 LAMP搭建并且部署sqli-labs
- HDU 6342 Expression in Memories(模拟)多校题解
- java按钮禁用和启用_在浏览器中禁用(或启用)Java插件
- STK Component Insight3D控件-WPF方式
- OS实验-模拟实现首次/最佳/最坏适应算法的内存块分配和回收
- 曾是谷歌程序员,抛下百万年薪创业,4年成就7亿用户,今身价百亿!
- linux wifi6,WIFI6 基本知识(一)
- Linux 调试之 TRACE_EVENT(三)
- android电视分辨率是多少合适,电视分辨率多少合适
- 理解windows消息通告消息和命令消息!!!
- Latex 论文插入copyright
- python按指定概率抽样_python:抽样和抽样方法
- DELL笔记本拆机添加内存条
- 如何安装nginx第三方模块--add-module
- GEE开发之Modis_ET数据分析和获取
热门文章
- 明明连上了网,但是打不开网页
- 字符编码笔记:ASCII,Unicode和UTF-8(转) + BASE64
- GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
- 掌握 PHP 中的正则表达式 二
- DeepID2:Deep Learning Face Representation by Joint Identification-Verification
- 奇异值分解(SVD) --- 几何意义2
- VR开发从何入手的实战分享
- Linux运维基础(硬件和操作系统)
- 提高PHP编程效率的20个要点(转)
- 细节:以为字符串不为空