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 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 《kotlin实战》学习总结(2) -> 正文阅读

[移动开发]《kotlin实战》学习总结(2)

函数的定义和调用

1在kotlin中创建集合

val set = hashSetOf(1, 7, 53)
val list = arrayListOf(1, 7, 53)
val map = hashMapOf(1 to "one", 2 to "two", 3 to "three")

kotlin中的集合类型与java中完全一致,但kotlin新增了更多方法。

2 让函数更好调用

2.1 命名参数

当调用一个kotlin定义的函数时,可以显式地标明一些参数的名称。如果指明了一个参数的名称,那它之后的所有参数都需要标明名称(前面的参数不需要)

fun <T> joinToString(collection: Collection<T>, 
		separator: String, 
		prefix: String, 
		postfix: String): String{
}
//调用
joinToString(collection, separator = "separator", prefix = "prefix", postfix = "postfix")

需要注意的是当调用java的函数时不能使用命名参数。

2.2 默认参数值

为了解决java中重载函数过多的问题,在kotlin中,可以在声明函数的时候,指定参数的默认值,这样就可以避免创建重载的函数。

fun <T> joinToString(collection: Collection<T>, 
		separator: String = "sep", 
		prefix: String = "pre", 
		postfix: String): String = "pos"{
}

在使用时必须按照定义的参数顺序来给定参数,可以省略部分参数。如果使用命名参数,可以省略中间的一些参数,也可以按你想要的顺序给定你需要的参数。

2.3 消除静态工具类:顶层函数和属性

顶层函数

在java中几乎所有代码都写作类的函数,但几乎所有的大型项目,最终都有很多的代码不能归属到任何一个类里。结果就是,最终这些类将不包含任何的状态或者实例函数,而是仅仅作为一堆静态函数的容器。

在kotlin中根本不需要去创建这些无意义的类。相反,可以直接把这些函数放到代码文件的顶层,不用从属任何的类。这些放在文件顶层中的函数依然是包内的成员,如果能需要从包外访问它,则需要import。

顶层函数在编译时会编译为这个类的静态函数。

顶层属性

跟函数一样,属性也可以放到文件的顶层。在一个类的外面单独保存数据片段虽然不常用,但还是有它的价值。比如计算一些函数被执行的次数。

默认情况下顶层属性跟其他任何属性一样,是通过访问器暴露给java使用。如果你想要把一个常量以public static final的属性暴露给java,可以用const来修饰它。

3 给别人的类添加方法:扩展函数和属性

扩展函数就是一个定义在类外面的类成员函数。

fun String.addFun() = print(this.length)

和在类内部定义的方法不同的是,扩展函数不能访问私有的或者是受保护的成员。

3.1 导入和扩展函数

对于定义的扩展函数,它不会自动地在整个项目范围生效。相反,如果你要使用它,需要进行导入,就像其他类或者函数一样。这是为了避免偶然性的命名冲突。kotlin允许你像导入一个类一样来导入单个函数。

import String.addFun
//可以使用as关键字来修改导入的类或函数名称
import String.addFun as add

3.2 从java中调用扩展函数

扩展函数本质上还是静态函数,它只是把调用对象作为了它的第一个参数。调用扩展函数不会创建适配的对象或者任何运行时的额外消耗。

3.3 不可重写的扩展函数

扩展函数不可重写。扩展函数并不是类的一部分。如果父类和子类都定义了一个同名的扩展函数,会根据该变量的静态类型决定调用哪个,而不是变量的运行时变量。

3.4 扩展属性

val String.lastChar: Char
	get() = get(length - 1);

print("kotlin".lastChar)
>>> n

注意,从java中访问扩展属性时应该显式地调用它的getter函数。

4 让你的代码更简洁:局部函数和扩展

为了减少重复的代码,kotlin允许在函数中再声明一个函数来调用。
局部函数可以直接访问外层函数的参数。

fun saveUser(user: User) {
	fun validate(value: String){
		if(value.isEmpty()
			print("value is empty!)
	}
	validate(user.name)
	validate(user.email)
}

4.1提取逻辑到扩展函数

扩展函数也可以被声明为局部函数。

fun User.validateBeforeSave() {
	fun validate(value: String){
		if(value.isEmpty()
			print("value is empty!)
	}
}

//调用扩展函数
fun saveUser(user: User){
	user.validateBeforeSave()
}
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 11:02:31  更:2021-07-14 11:05:05 
 
开发: 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年11日历 -2024/11/22 23:35:56-

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