一:基础要点

//常量定义 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学习-基础知识点相关推荐

  1. FPGA硬件学习基础知识点总结(1)

    FPGA硬件学习基础知识点总结(1)锁存器与触发器 总结一下数电,FPGA的一些基础知识,涉及到硬件电路的设计.主要是记录自己的学习过程. 锁存器与触发器 锁存器(latch):锁存器是电平触发的存储 ...

  2. 深度学习基础知识点【更新中】

    深度学习基础知识点 文章目录 深度学习基础知识点 1. 数据归一化 2. 数据集划分 3. 混淆矩阵 4. 模型文件 5. 权重矩阵初始化 6. 激活函数 7. 模型拟合 8. 卷积操作 9. 池化操 ...

  3. java 学习基础知识点拾遗 导航页

    每种编程语言的知识点都是很多很杂的,java也是如此 相信很多人学习的过程中都是深一脚浅一脚,最基础的东西可能有些也不是非常确定 整理了最基本的一些知识点,可以说是java入门的-1层级别的,作为自己 ...

  4. 深度学习基础知识点归纳总结

    1. 最小化代价函数优化方法:BGD.SGD.MBGD.动量.NAG.Adagrad.AdaDelta.Adam.AMSGrad.牛顿法: 2. 前馈神经网络的隐藏单元不一定在所有的输入点上可微: 3 ...

  5. 深度学习基础知识每日更 upupup

    深度学习基础知识点总结 提示:菜鸟入门日记,若总结有错误,各路大佬多多指教! 文章目录 深度学习基础知识点总结 Looking for my friends 一.零散知识点 1.网络拼接和相加的区别 ...

  6. Java入门基础知识点整理大放送,推荐保存

    为了方便大家学习Java,理顺Java技术知识点,也可以助您尽快的努力成长起来,小编整理了以下Java入门基础知识,一起来学习吧! 一.概述 1991年Sun公司的James Gosling等人开始开 ...

  7. Kotlin学习笔记 第一章开始 第二章 基础

    参考链接 Kotlin官方文档 https://kotlinlang.org/docs/home.html 本系列为参考Kotlin中文文档 https://download.csdn.net/dow ...

  8. 深度学习(DL)与卷积神经网络(CNN)学习笔记随笔-01-CNN基础知识点

    转载自:http://blog.csdn.net/niuwei22007/article/details/47399913 <CNN基础知识点>From:Convolutional Neu ...

  9. 深度学习tensorflow数据流图基础知识点

    一.深度学习与机器学习区别 (一)特征提取方面 1.机器学习的特征工程步骤是要靠手动完成的,而且需要大量领域专业知识 深度学习通常由多个层组成,它们通常将更简单的模型组合在一起,通过将数 据从一层传 ...

最新文章

  1. 修改服务器端的访问模式,ftp服务器端 修改主动模式
  2. 关于深度学习的小知识点
  3. 检查字符串是否为有效URL的最佳正则表达式是什么?
  4. 现金流量表整理及开发
  5. python中的cli模块_Python 快速实现CLI 应用程序的脚手架
  6. php7版本搭建sqli labs,CentOS 7 LAMP搭建并且部署sqli-labs
  7. HDU 6342 Expression in Memories(模拟)多校题解
  8. java按钮禁用和启用_在浏览器中禁用(或启用)Java插件
  9. STK Component Insight3D控件-WPF方式
  10. OS实验-模拟实现首次/最佳/最坏适应算法的内存块分配和回收
  11. 曾是谷歌程序员,抛下百万年薪创业,4年成就7亿用户,今身价百亿!
  12. linux wifi6,WIFI6 基本知识(一)
  13. Linux 调试之 TRACE_EVENT(三)
  14. android电视分辨率是多少合适,电视分辨率多少合适
  15. 理解windows消息通告消息和命令消息!!!
  16. Latex 论文插入copyright
  17. python按指定概率抽样_python:抽样和抽样方法
  18. DELL笔记本拆机添加内存条
  19. 如何安装nginx第三方模块--add-module
  20. GEE开发之Modis_ET数据分析和获取

热门文章

  1. 明明连上了网,但是打不开网页
  2. 字符编码笔记:ASCII,Unicode和UTF-8(转) + BASE64
  3. GdiPlus[21]: IGPPathGradientBrush 之 InterpolationColors
  4. 掌握 PHP 中的正则表达式 二
  5. DeepID2:Deep Learning Face Representation by Joint Identification-Verification
  6. 奇异值分解(SVD) --- 几何意义2
  7. VR开发从何入手的实战分享
  8. Linux运维基础(硬件和操作系统)
  9. 提高PHP编程效率的20个要点(转)
  10. 细节:以为字符串不为空