IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 小白学习Android开发第三天 -> 正文阅读

[移动开发]小白学习Android开发第三天

  1. 关于匿名函数的用法

匿名函数也是有类型的,可以作为 变量 赋值给 函数类型变量【可以理解一下什么是函数类型变量,这个count是函数类型变量吗?】那么此时的匿名函数就和其他的变量一样,匿名函数就可以再代码里进行传递。

匿名函数的类型由 传入的参数和返回值类型 决定。所以匿名函数作为变量给函数类型变量后,函数类型变量的类型就是由匿名函数的参数和返回值类型决定的。

匿名函数除开极少数的情况【哪些情况下有返回值】,不需要return关键字返回数据。隐式或者是自动返回函数体最后一行语句的结果

??? val count : Int = "huidgiuhjkgui".count({
??????????? letter -> letter == 'i'
??? })
??? print(count)

//声明一个变量,变量的类型是由 匿名函数的参数和返回值类型决定的

//这里的变量是NiBl,类型 是由下面这个匿名函数的参数类型【无参】,返回值类型【String】

val NimBl : () -> String

NimBl = {

??? //这里就是一个匿名函数,没有参数,返回值是看最后一行语句的执行结果。

??? val name = "Anber"

??? "jsghuj $name"

}

print(NimBl)

关于匿名函数的参数怎么写?

匿名函数可以带0到多个参数,

//刚刚的是一个没有传入参数的匿名函数,现在我们看一下有多个参数的传入应该怎么办

val NiBl2 : (String,Int) -> String

NiBl2 = { sno, age ->

??? val sex? = 0

??? "$sno is $sex and $age years old"

}

println(NiBl2("3120405012", 18))

自己思考一下,结合之前学的知识when,将sex可以改为输出,0位女,1为男。

val NiBl2 : (String,Int,Int) -> String

NiBl2 = { sno, age, sex ->

??? when (sex){

??????? 0 -> "$sno is girl and $age years old"

??????? else -> "$sno is boy and $age years old"

??? }

}

println(NiBl2("3120405012", 18, 0))

关于匿名函数的类型推断

//其实根据类型推断,类型可以不用指明,这也是一个匿名函数传给一个函数类型变量

val NimBl1? = {

??? //这里就是一个匿名函数,没有参数,返回值是看最后一行语句的执行结果。

??? val name = "Anber"

??? "jsghuj $name"

}

println(NimBl1)

这样也可以,函数参数类型在匿名函数中写

val NiBl3 = { sno: String, age: Int, sex: Int ->

??? when (sex){

??????? 0 -> "$sno is girl and $age years old"

??????? else -> "$sno is boy and $age years old"

??? }

}

println(NiBl3("3120405012", 18, 0))

补充: 1)在一个函数中,如果传入参数,参数可以是上面这种函数类型的参数,但具体怎么用

NiMTest("anber",{name : String , age: Int ->

??????? " $name is $age years old "

??? })



}



fun NiMTest(name: String, Nim: (String, Int) -> String){

??? var age = (1..20).random()

??? println(Nim(name, age))

}

2)函数类型作为返回值类型

fun FunF (): (String) -> String{

??? return {name: String ->

??????? "hjsgbxbkhi"

??? }

2.闭包

3.关于lambda 的用法

想kotlin中定义的lambda会以对象实例的形式存在,JVM会为这些对象实例分配内存,会产生内存开销,但是在kotlin中有一个优化机制,内联

4.关于在kotlin中的异常处理机制

学习一下关于自己定义的异常类,其他和Java一样。

5.== 和 === 的比较

== 比较的是两个字符串内容

=== 比较的是两个字符串的地址,字符串的常量池,是否是同一个引用

val n = "Hj"

val m = "hj".capitalize()

println(n==m) //true

println(n === m ) //false

字符串常量池有三个对象,所以地址是不一样的

6.关于类型转换

7.标准库函数

Apply函数:是一个配置函数,可以传入一个接收者,然后调用一系列函数来配置它以便于使用,如果提供lambda给apply函数执行,它会返回配置好的接收者。File2 就是用Apply进行配置的,返回file2

val file = File("D:\\aa.txt")

?file.setReadable(true)

?file.setWritable(true)

?val file2 = File("D:\\aa.txt").apply {

???? setReadable(true)

???? setWritable(true)

?}

let函数:能使某个变量作用于其lambda表达式里面,让it关键字可以引用它,let会吧接收者传给lambda,而apply不传,apply会返回当前接收者(返回的是File),而let会返回lambda的最后一行。(这里是it*it的数值给)

val num = listOf<Int>(2,245,55).first().let {

?? it * it

}

println(num)

run函数:不返回接收者,返回的是lambda的结果,也就是true或者是false,同时具备Apply的隐式调用,同时也有let返回lambda的执行结果,

val rw = File("D:\\aa.txt").run {

?? readText().contains("gdyg")

}

println(rw)

with函数:和run传参的方式不同

also函数:和let功能相似,把接收者对象传入,并且返回接收者对象

takeif函数:需要判断,如果执行结果是true,则takeif函数返回接收者对象,如果执行结果是false,则返回null

takeUnless函数:和takeif相反的

8.集合类型的创建

List set map 只读和可变

(1)list集合

var list? = listOf<String>("dhuio","huidhg","jdiwh")

println(list.getOrElse(2){

??? "nothing"

})

println(list.getOrNull(3) ?: "nothing")

可变的list是用mutableList

var mutableList = mutableListOf("mkjc",111,'h')

mutableList.add("jisjd")

mutableList.removeAt(1)

mutableList += "ji"

println(mutableList)

集合的遍历:

for (s in list) {

??? println(s)

}


list.forEach{

??? print(it)

}


list.forEachIndexed { index, item -> 

??? print("$index is $item")

}

集合的解构:解构就是一次性通过集合给多个元素赋值,

val(a :String, _: String, c: String) = list

这里就是说将list中的元素赋值给a,c,中间的b值是不需要的,所以就用_来表示不需要的。

Distinct()函数是list的去重。

(2)set集合

Set集合特点就是不可重复,无序的。

val set = setOf(1, "njkd", 'n')

println(set)

for (item in set) {

??? println(item)

}

set.forEach{

??? println(it)

}

set.forEachIndexed { index, any ->

??? print("$index is $any.." )

}

?(3)map集合

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-10 11:35:50  更:2021-07-10 11:36:32 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/20 9:10:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码