Kotlin小节

1、Kotlin只提供引用类型这一种数据类型。

2、===和!==的含义

=== 计算两个实例是否指向同一引用
!== 计算两个实例是否不指向同一引用

3、条件表达式给变量赋值

var healthstr = if(health == 100)"It is excellent" else "It is awful"

4、when表达式

是Kotlin的另一个控制流工具。类似于if/else语句,
when表达式允许你编写条件式,非常适合有三到四个分支的情况。

相比以前的if/else语句,when表达式能让代码更简洁易读。实践经验表明,只要代码包含else if分支,都建议改用when表达式。

5、asList()和toList()的区别

asList():仍然保持对原始Array的引用。 这意味着该列表的突变也会改变基础Array 。

toList():只是将Array的值复制到一个新的List ,但是之后没有任何延续的链接。

6、const变量

不在函数或类内,它是文件级变量。

const val NUMBER_VALUE = 10;//定义const变量

在项目范围内,你都能看到或使用这个文件级变量(当然,有需要的
话,可以添加可见性修饰符,修改其可见性)。文件级变量保持着初
始化状态,一直到应用程序执行结束。

文件级变量在定义时就必须赋值,否则代码就无法编译(在第15章,
你会看到这方面的代码异常)。这种强制要求可避免代码异常,例
如,你正要使用某个变量,而它却没有值。

7、单表达式函数语法

只需要使用赋值运算符=后跟表达式就可以了。

8、Unit函数

如函数无返回值时,返回类型为Unit类型。

通过使用Unit作为返回类型,Kotlin解决了这一难题。Unit表示一
个函数不返回任何东西,同时,也能兼容需要和一些类型打交道的泛
型函数。无论有无类型,都不是问题,这正是Kotlin使用Unit的原
因。

9、具名函数参数

如果不用具名函数值参,就必须按函数头的定义,严格按顺序
传入值参。而有了具名函数值参,传入值参时就可以不管函数头的参
数顺序了。

private fun formlate(str: String = "abc"): String {//设置形参默认值为abcvar healthstr1 = "healthstr"health = 56;healthstr1 = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> { formlate1(number = 90, str = "www")//具名函数参数}}println("healthWhen:$healthstr1, str:$str")return healthstr1
}
private fun formlate1(str: String = "abc", number: Int) = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> {"str:$str, number:$number"}

10、TODO函数返回值类型为Nothing类型

TODO()函数调用后的语句不执行。

fun main(arrays: Array<String>) {   
tesetTODU()
}
fun tesetTODU(){println("Test will be processed")
    TODO()println("Test is processed")
}

10、java文件引用kt文件方法和变量

java文件里应用kt文件中文件级别方法或者变量,需要使用”类名+kt“ 去调用

public class RunMain {public static void main(String[] args) {System.out.println("hello world!"+TestDemoKt.formlate("DEF"));}
}
 fun formlate(str: String = "abc"): String {//设置形参默认值为abcvar healthstr1 = "healthstr"health = 56;healthstr1 = when (health) {100 -> "A"90 -> "B"80 -> "C"60 -> "D"else -> {formlate1(number = 90, str = "www")//具名函数参数}}println("healthWhen:$healthstr1, str:$str")return healthstr1
}

11、匿名函数,又叫做lamada表达式

在一对花括号里定义匿名函数。

var customFunction2:(String)->String = {var num = 10"num:$num it:$it"
}

在花括号的后面跟上一对空的圆括号,表示调用匿名函数。圆括号不能省。

println(customFunction2("elena"))

返回值:没有return关键字,为了返回数据,匿名函数会隐式或自动返回函数体最后一行语句的结果。

参数:参数的类型放在匿名函数的类型定义中,参数名则放在函数定义中。

it关键字语法只适用于一个参数的情况。匿名函数支持多个参数。如
果有多个参数,需要使用命名参数。

如果一个函数的lambda参数排在最后,或者是唯一的参数,那么括住
lambda值参的一对圆括号就可以省略。所以之前的代码:

一个参数的情况:

fun  functionAsParamTest2(customFunction6 :(String , Int) -> String ){println("customFunction6:"+customFunction6("nnn",999))
}
functionAsParamTest2({name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
})
就可以简写成这样:
functionAsParamTest2{name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
}

两个参数的情况:

functionAsParamTest3(888,{name:String, age:Int ->var num = 99"num:$num name:$name age:$age"
})

可以简写成这样:

functionAsParamTest3(888){name:String, age:Int ->//匿名函数作为参数,最好写在最后var num = 99"num:$num name:$name age:$age"
}

三个参数的情况:

functionAsParamTest4(888,"teacher",{name:String, age:Int ->//三个参数的情况,匿名函数排在参数列表最后,可以省区圆括号var num = 99"num:$num name:$name age:$age"
})

可以简写成这样:

functionAsParamTest4(888,"teacher"){name:String, age:Int ->//三个参数的情况,匿名函数排在参数列表最后,可以省区圆括号var num = 99"num:$num name:$name age:$age"
}

使用这种简略语法后,代码更简洁易读,能够让人快速抓住重点。这种简略写法只支持lambda参数排在最后的情况,所以,定义函数时,建议把函数类型的参数放在最后,以方便调用者使用。

12、函数引用(形参类型是函数类型)

函数形参类型是函数类型,函数引用作为值参。使用时需要::加上函数名即可。

形参函数的返回值需要是Unit类型。

functionReference("student", ::getPersonInfo)
//函数引用
fun functionReference(career:String ,getInfo:(String, Int)->Unit){println("career:$career,"+getInfo)
}
fun getPersonInfo(name:String, age:Int){"name:$name,age:$age"
}

13、返回类型是函数类型

var function = functionReturnFunction()

println(function("egg", 100))

fun functionReturnFunction(): ((String, Int) -> String) { //返回类型是函数类型return { name: String, age: Int ->println("返回值为函数")//只返回函数本身,不执行函数体"name:$name ,age:$age"}
}

14、安全调用操作符(?.)

var str : String? = null;
str = "yyy"
var len = str?.length
println(str)

15、let安全调用函数

任何类型的数据都可以调用let函数。

it是非空的,即,调用let函数的变量不为null时,执行let函数内部的语句。

let函数作用:1、创建新值2、调用其他函数

16、!!.非空断言操作符

字符串为空时,抛出空指针异常。

var str : String? = null;

str = "yyy"

//!!.非空断言操作符,
var newStr = str!!.capitalize()
println(newStr)

17、?:空合并操作符

如果左边的求值结果是null,就使用右边的结果值。可以避免null值得出现。

var str : String? = null;
//str = "yyy"
var newstr = str?:"xxx"
println(newstr)

18、解构

List集合支持在解构语法。只要是集合结果都可以用解构赋值。

解构语法:list集合可以同时给多个变量赋值。例如:

var str = "bu,gou,yan,xiao"
val (str1,str2,str3,str4) = str.split(',')
println("str1:$str1,str2:$str2,str3:$str3,str4:$str4")

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/15107.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PP-Matting: AI高精度图像前景Matting,让抠图轻而易举

分割和Matting的一个重要区别是:分割返回的是像素分类标签,其结果是整型数据;而Matting返回的是属于前景或背景的概率P,从而在前景与背景交互区域产生渐变的效果,使得抠图更加自然。Matting分割模型训练完成后,对于原始图像每个位置上的像素,都将生成一个表示其前景透明…

创建维基WIKI百科和建立百度百科有何不同?

很多企业有出口业务&#xff0c;想在互联网上开展全球性网络营销&#xff0c;维基百科往往被认为是开展海外营销的第一站。其作用相当于开展国内网络营销的百度百科&#xff0c;经常有些企业给小马识途营销顾问提供的词条内容就是百度百科的内容&#xff0c;可事实上两个平台的…

ETHERNET/IP 转ETHERCAT连接倍福和欧姆龙PLC的配置方法

ETHERNET/IP和ETHERCAT是两种不同的协议&#xff0c;它们在工业生产中都有广泛的应用。然而&#xff0c;由于协议不同&#xff0c;这两种设备之间无法通讯&#xff0c;这给工业生产带来了很大的麻烦。而捷米JM-EIP-ECAT网关应运而生&#xff0c;它能够连接到ETHERNET/IP总线和E…

小研究 - JVM 垃圾回收方式性能研究(一)

本文从几种JVM垃圾回收方式及原理出发&#xff0c;研究了在 SPEC jbb2015基准测试中不同垃圾回收方式对于JVM 性能的影响&#xff0c;并通过最终测试数据对比&#xff0c;给出了不同应用场景下如何选择垃圾回收策略的方法。 目录 1 引言 2 垃圾回收算法 2.1 标记清除法 2.2…

【数据结构】栈(Stack)的实现 -- 详解

一、栈的概念及结构 1、概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在表尾进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出 LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈…

SpringBoot的pom文件、容器、组件

一、pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4…

求分享如何批量压缩视频的容量的方法

视频内存过大&#xff0c;不但特别占内存&#xff0c;而且还会使手机电脑出现卡顿的现象&#xff0c;除此之外&#xff0c;如果我们想发送这些视频文件可能还会因为内存太大无法发送。因此&#xff0c;我们可以批量地压缩视频文件的内存大小&#xff0c;今天小编要来分享一招&a…

聊聊原子弹之父:奥本海默

最近诺兰的电影奥本海默即将热映,其改编自Kai Bird和 Martin J. Sherwin的 2005 年Pulitzer Prize 获奖小说:“American Prometheus: The Triumph and Tragedy of J. Robert Oppenheimer”。这本小说作者研究奥本海默25年,才得以成形,可见奥神本人身上的故事曲折和传奇。 …

Arrays(数组)工具类

java.util.Arrays 是一个与数组相关的工具类&#xff0c;里面提供了大量静态方法&#xff0c;用来实现数组常见的操作。 Arrays.toString ( 数组名 )将参数数组变成字符串&#xff08;按照默认格式&#xff1a;[10, 20, 30]&#xff09;Array.sort ( 数组名 ) 按照默认升序&…

数据库索引优化与查询优化——醍醐灌顶

索引优化与查询优化 哪些维度可以进行数据库调优 索引失效、没有充分利用到索引-一索引建立关联查询太多JOIN (设计缺陷或不得已的需求) --SQL优化服务器调优及各个参数设置 (缓冲、线程数等)–调整my.cnf数据过多–分库分表 关于数据库调优的知识点非常分散。不同的 DBMS&a…

Hive教程_编程入门自学教程_菜鸟教程-免费教程分享

教程简介 Hive是基于Hadoop的一个数据仓库工具&#xff0c;用来进行数据提取、转化、加载&#xff0c;这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。hive数据仓库工具能将结构化的数据文件映射为一张数据库表&#xff0c;并提供SQL查询功能&#xff0c;能将…

Pycharm工具Python开发自动添加注释(详细)

方法自动添加参数注释 定义了一个函数&#xff0c;在函数下面敲入了三个双引号后&#xff0c;enter回车并没有自动出现注释&#xff0c;如图&#xff1a; 解决办法 Pycharm中依次打开File —> Settings —> Tools —> Python Integrated Tools&#xff0c;如图&…

isp调试工具环境搭建及其介绍!

一、isp调试环境搭建&#xff1a; 后期调试isp&#xff0c;是在rv1126提供的RKISP2.x Tuner工具上进行调试&#xff0c;所以我们大前提必须要把这个环境和一些操作先搞熟悉来&#xff0c;后面有一些专用术语&#xff0c;我们遇到了再去看&#xff0c;现在专门看一些专用术语&am…

【TypeScript】类型声明及应用(二)

【TypeScript】类型声明及应用&#xff08;二&#xff09; 一、前言 TypeScript开发中需要对定义的变量指定类型&#xff0c;目前版本都支持哪些类型&#xff0c;每一个类型都有哪些含义&#xff0c;在这篇文章中&#xff0c;我们将会对其进行总结说明 二、JavaScript基本数据…

6、LINUX 系统启动过程概述

Linux系统启动过程可以分为以下几个阶段&#xff1a; BIOS/UEFI&#xff1a;计算机开机时&#xff0c;首先会执行基本输入输出系统&#xff08;BIOS&#xff09;或统一可扩展固件接口&#xff08;UEFI&#xff09;。这个过程中&#xff0c;BIOS/UEFI会自检硬件设备并初始化它们…

面试题 -- iOS数据存储

文章目录 一、如果后期需要增加数据库中的字段怎么实现&#xff0c;如果不使用CoreData呢&#xff1f;二、SQLite 数据存储是怎么用&#xff1f;三、简单描述下客户端的缓存机制&#xff1f;四、实现过多线程的Core Data 么&#xff1f;NSPersistentStoreCoordinator&#xff0…

Scrapy和Selenium整合(一文搞定)

文章目录 前言一、开始准备1. 包管理和安装chrome驱动2. 爬虫项目的创建&#xff08;举个栗子&#xff09;3. setting.py的配置 二、代码演示1. 主爬虫程序2. 中间件的配置3. 定义item对象4. 定义管道 总结 前言 scrapy和selenium的整合使用 先定个小目标实现万物皆可爬&#…

Pycharm debug程序,跳转至指定循环条件/循环次数

在断点出右键&#xff0c;然后设置条件 示例 for i in range(1,100):a i 1b i 2print(a, b, i) 注意&#xff1a; 1、你应该debug断点在循环后的位置而不是循环上的位置&#xff0c;然后你就可以设置你的条件进入到指定的循环上了 2、设置条件&#xff0c;要使用等于符号…

如何加强Mysql安全,请给出可行的具体措施

如何加强Mysql安全&#xff0c;请给出可行的具体措施 数据库对于公司而言是一个非常重要的资产。它在数据存储和管理、业务应用支持、决策和分析、数据安全和合规性、业务连续性以及客户关系管理等方面都发挥着关键作用。因此&#xff0c;公司应该高度重视数据库的建设、管理和…

C# Assembly 反射动态加载程序集(动态加载Dll)Demo

No1、本Demo 定义了一个接口IserviceToolFrame&#xff0c;接口中有一个方法Run。 No2、在另外两个工程中&#xff0c;分别定义两个类serviceToolCatComplete、serviceToolDogComplete实现接口IserviceToolFrame。 No3、控制台程序通过动态加载Dll的方式去调用IserviceToolFram…