Kotlin学习(3):习惯用法
来源:互联网 发布:教师网络研修收获 编辑:程序博客网 时间:2024/05/17 23:48
习惯用法
- 开发环境:IntelliJ IEDA
- 个人博客:http://blog.csdn.net/IInmy
- 项目源码:https://github.com/Rushro2m/LearnKotlin-master
1、数据类
(1)创建数据类
data class Custom(val name:String,val email:String)
(2)系统自动提供的功能
- 所有属性的getters(对于val定义还有setters)
- equals()
- hashCode()
- toString()
- copy()
- 所有属性的component1()、component2()
2、函数默认参数
一般情况下如果函数的参数都有默认值
//下面两种方法的效果是等同的fun foo(x: Int = 0, y: String = "") { println("$x is $y")}fun fzz(x: Int, y: String) { println("$x is $y")}fun main(args: Array<String>) { foo(3, "three") fzz(4, "four")}
3、list的过滤
一般情况下,集合使用filter方法对数据进行过滤。
val list = listOf(1, 3, 4, 5, 6, 7, 8, 9, 10)//两种实现方式是等同的val positives = list.filter { x -> x > 5 }val positives2 = list.filter { it > 5 }fun main(args: Array<String>) { println(positives.forEach { print(it) }) println(positives2.forEach { print(it) })
4、String内插
String内插,就是将变量插入到String字符串中,通过 $ 符号将变量插入。
fun person(name: String, age: Int) { println("name-->$name,age-->$age")}fun main(args: Array<String>) { person("张三", 24)}
5、类型判断
对变量的类型进行判断,通过字符 is,判断其是否为某种类型。
fun type(x: Any) { when (x) { is Number -> println("$x is Number") is String -> println("$x is String") else -> println("don't know type") }}fun main(args: Array<String>) { type(3) type("Hello") type('c')}
6、遍历map型list
map型的集合是有key-value对应值的,通过for循环对其遍历输出。
fun print(x: HashMap<String, String>) { for ((k, v) in x) { println("key -->$k,value-->$v") }}fun main(args: Array<String>) { val items = hashMapOf("a" to "apple", "b" to "banana", "o" to "orange") print(items)}
7、区间
区间的判断,一般使用 in 对数据进行判断, 判断其是否在某个区间内。
一般来说,区间的范围,有几种表现形式:
- x..y :x到y之间
- x until y:x到y之间(左闭右开,不包含y)
- x..y step z:x到y之间,只算z的整数倍
- x downTo y:一般来说,此种情况下,都是x>y,x递减至y之间的数
fun main(args: Array<String>) { for (i in 1..10) { print("$i ") } println() //左闭右开区间 for (i in 1 until 5) { print("$i ") } println() for (i in 2..10 step 2) { print("$i ") } println() for (i in 10 downTo 1) { print("$i ") } println() val i = 3 if (i in 1..10) { print("$i ") }}
8、访问map
(1)访问key值
- 通过map.keys访问所有的key值
(2)访问value值
- 通过map.values访问所有的value值
- 通过map[key]访问特定的value值
fun main(args: Array<String>) { //定义为只读map val map = mapOf("a" to "apple", "b" to "banana", "o" to "orange") //访问所有的key值 map.keys.forEach { println(it) } //访问所有的value值 map.values.forEach { print(it) } //访问key = a 的value值 println(map["a"])}
9、扩展函数
在函数的基础上,对其进行扩展,增加自己想要的功能。比如扩展这样一个功能:对任意的对象转换为字符串功能。
fun Any?.changeToString(): String { return if (this == null) "null" else return toString()}fun main(args: Array<String>) { var name = 'c' var age = 22 println(name.changeToString()) println(age.changeToString())}
10、缩写
(1)If not null 缩写
对象和调用的方法之间添加 ?,就是对其进行不为空判断。
val files = File("Test").listFiles()println(files?.size)
(2)If not null and else缩写
在判断完之后添加 :,就是else的内容。
val files = File("Test").listFiles()println(files?.size ?: "没有此文件")
(3)If null 执行一个语句
通过 ?:,后面为null之后所执行的语句
val values = mapOf("a" to "apple", "e" to "email")val email = values["email"] ?: throw IllegalAccessException("Email is Missing")println(email)
(4)If not null 执行代码
通过 ?.let{},如果为null就行let{ }里面的代码
val value = "163.com"value?.let { println("已经查找到Email,地址为:" + it)}
11、返回when表达式
通过return when(){},通过不同条件返回不同结果。
fun transform(color: String): Int { return when (color) { "RED" -> 0 "GREEN" -> 2 "BLUE" -> 3 else -> throw IllegalAccessException("no have this color") }}fun main(args: Array<String>) { println(transform("GREEN"))}
12、tyr/catch表达式
try-catch抛异常执行相应操作。
fun test(age: Int): Any? { val result = try { age < 10 } catch (e: ArithmeticException) { throw IllegalAccessException(e.toString()) } return result}fun main(args: Array<String>) { println(test(10))}
13、“if”表达式
通过对不同条件的判断,输出不同的结果。
fun foo(param: Int) { if (param == 1) { println("one") } else if (param == 2) { println("two") } else { println("three") }}fun main(args: Array<String>) { foo(2)}
14、单表达式
如果一个函数的返回结果很简单,也可以直接写成单表达式。
同时,单表达式函数与其他惯用法一起使用,简化代码,例如和when一起使用。
//两种方式是等同的fun theAnswer() = 42fun theAnswer2(): Int { return 42}//单表达式函数与when一起使用fun transform2(color: String): Int = when (color) { "RED" -> 0 "GREEN" -> 1 "BLUE" -> 2 else -> throw IllegalAccessException("don't have this color")}fun main(args: Array<String>) { println(theAnswer()) println(theAnswer2()) println(transform2("RED"))}
15、一个对象实例调用多个方法
当一个对象想要调用多个方法时,可以使用with(){},在()内填入对象,在{}内依次填入需要调用的方法。
class Turtle { fun penDown() {} fun penUp() {} fun turn(degree: Double) {} fun forward(pixels: Double) {}}fun main(args: Array<String>) { val myTurtle = Turtle() with(myTurtle) { penDown() for (i in 1..4) { forward(100.0) turn(90.0) } penUp() }}
16、可空布尔
fun ftt(b: Boolean?) { if (b == true) { println("true") } else { print("false or null") }}fun main(args: Array<String>) { idiomatic_usage.ftt(true) ftt(null)}
阅读全文
0 0
- Kotlin学习(3):习惯用法
- kotlin习惯用法——kotlin官方文档学习
- kotlin---习惯用法
- Kotlin 从学习到 Android 第二章 习惯用法
- kotlin官方文档中文翻译(一)基础语法,习惯用法,编码习惯
- Kotlin学习(3)
- Kotlin开发语言学习(3)Kotlin与Java混编
- Kotlin学习(学习kotlin的日子)
- 疯狂Java学习笔记(89)-----------Java习惯用法总结
- Java学习笔记(89)-----------Java习惯用法总结
- Kotlin学习(一)Kotlin插件安装
- Kotlin学习(二)Hello Kotlin
- Kotlin学习(1):Kotlin简介
- kotlin 学习记录 基本语法 (3)
- Kotlin学习笔记(3)- 语法
- kotlin学习笔记3
- Kotlin学习(1)
- Kotlin学习(2)
- AndroidStudio中TextView规范
- SQL语句使用02------select语法
- java基础复习2 选择&循环
- Java的基本类型和引用类型
- 浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
- Kotlin学习(3):习惯用法
- cobbler实现批量部署Linux服务器(CentOS7.3含自定义安装)
- 自动化爬取网贷黑名单
- UGUI框架
- PLSQL中如何进行界面的基本使用和编辑。
- hive中的增删改如何实现
- SDUT 2872二分查找
- python
- Module not found: Error: Can't resolve 'sass-loader' in 'D:\vue_test_project\vuedemo\src'