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)}
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电视指示灯不亮怎么办 手机不听使唤乱动怎么办 笔记本只有c盘怎么办 印章上印出的全是油怎么办 美工笔太粗怎么办 笔记本电脑速度太慢怎么办 电脑图形处理弱怎么办 戴尔笔记本电脑连不上网络怎么办 系统备份没有了怎么办 cad2014运行很慢怎么办 cad2007运行很慢怎么办 cad运2018行很慢怎么办 800*800图片太大怎么办 ps出现双箭头怎么办 衣服上面染上色怎么办 联想一体机忘记密码怎么办 三星a7手机黑屏怎么办 联想g40很卡怎么办 联想笔记本电脑卡机怎么办 笔记本电脑卡机了怎么办 笔记本电脑卡机动不了怎么办 ps变得很卡怎么办 戴尔笔记本卡了怎么办 戴尔电脑卡死了怎么办 win10显示器颜色不正常怎么办 没有密码重置盘怎么办 美术生英语不好怎么办 mbr分区安装不了怎么办 倒闭的共享单车怎么办 喷水壶喷嘴堵塞怎么办 电水壶按钮坏了怎么办 主机按钮坏了怎么办 手机系统删掉了怎么办 学习差的孩子怎么办 小猫生病不吃饭怎么办 深圳公寓被坑怎么办 跳芭蕾硬了怎么办 跳拉丁起反应怎么办 会认字不会写字怎么办 孩子不认识的字怎么办 小孩暑假没人带怎么办