• 开发环境:IntelliJ IEDA
  • 个人博客:http://blog.csdn.net/IInmy
  • 项目源码:https://github.com/Rushro2m/KotlinForOfficial
  • 官方文档中文版:https://www.kotlincn.net/docs/reference/idioms.html

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 = 3if (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>) {//定义为只读mapval 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 = 22println(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" -> 3else -> 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" -> 2else -> 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)
}

Kotlin学习(3):习惯用法相关推荐

  1. Kotlin 学习笔记(八)—— Kotlin类与对象之接口

    Kotlin 学习笔记(八)-- Kotlin类与对象之接口 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- 基础 ...

  2. Kotlin 学习笔记(七)—— Kotlin类与对象之属性与字段

    Kotlin 学习笔记(七)-- Kotlin类与对象之属性与字段 Kotlin学习笔记系列教程 Kotlin 学习笔记(一)-- 概述.学习曲线.开发工具.参考资料 Kotlin 学习笔记(二)-- ...

  3. 【Python基础】Python 10 个习惯用法,看看你都知道不?

    Python 使用习惯是指那些经常被使用的语法.语义和结构,这样写更加符合 Python 风格,看起来更像一个地道的 Pythoner. 本系列目的,分类整理 Python 使用习惯. 1. if n ...

  4. Kotlin学习笔记(3)- 语法

    系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步!kotlin学习笔记系列首发简书和CSDN Kotlin学习笔记(1)- 环 ...

  5. Kotlin学习笔记20 阶段复习2

    参考链接 示例来自bilibili Kotlin语言深入解析 张龙老师的视频 lambda表达式 内联函数 Kotlin学习笔记 第三章 函数 高阶函数 lambda表达式 内联函数_积跬步 至千里- ...

  6. 计算机英语短语与习惯用法词典,清华大学出版社-图书详情-《计算机英语短语与习惯用法词典》...

    随着计算机技术.网络技术及通信技术的迅猛发展,人类已进入网络信息时代.计算机技术.网络技术.通信技术以及多媒体技术的密切结合,带来了一场新的信息革命.这场革命正以前所未有的深度和广度渗透到工业.农业. ...

  7. Kotlin 学习笔记(四)—— 协程的基础知识,面试官的最爱了~

    又是一个月没见了,坚持永远是世上最难的事情,但,往往难事才会有更大的收获.与君共勉~ 前段时间一直在学习 Compose,所以导致 Kotlin 笔记系列搁置了好久.一方面是因为 Compose 的学 ...

  8. Kotlin学习(一):Kotlin基础知识

    Kotlin学习(一):Kotlin基础知识 定义变量常量 在Kotlin中,定义变量时有以下几点与java不同: 位置不同:在 Kotlin 中,数据类型要放到变量后面,并且用冒号(:)分隔,这正好 ...

  9. Java习惯用法总结

    在Java编程中,有些知识 并不能仅通过语言规范或者标准API文档就能学到的.在本文中,我会尽量收集一些最常用的习惯用法,特别是很难猜到的用法.(Joshua Bloch的<Effective ...

  10. Kotlin学习(七):函数

    Kotlin学习(七):函数 函数基本用法 Kotlin 函数必须用 fun 关键字开头,后面紧跟着函数名,以及一对小括号,小括号中是函数参数列表,如果函数有返回值,在小括号后面加冒号 (:),冒号后 ...

最新文章

  1. 美国年薪最高的高管是谁?彭博最新薪酬排名出炉,库克只排第二
  2. 51 nod 机器人走方格
  3. 【 MATLAB 】使用 MATLAB 得到高密度谱(补零得到DFT)和高分辨率谱(获得更多的数据得到DFT)的方式对比(附MATLAB脚本)
  4. 在linux环境下,使用find查找某个文件的指定路径
  5. 魔方机器人需要特制魔方吗_解魔方的机器人攻略18 – 魔方快速算法
  6. JVM规范阅读-instance of
  7. some screenshot of Fiori cloud launchpad
  8. HDLBits答案(20)_Verilog有限状态机(7)
  9. Codeforces Gym 100286I iSharp 模拟
  10. 【一天一算法】冒泡排序
  11. Windows程序设计_学习总结(1)
  12. CAD 卸载工具,完美彻底卸载清除干净cad各种残留注册表和文件【转载】
  13. MYS-6ULX-IOT 开发板测评——支持 RTL8188 WiFi 模块
  14. 2017北邮计算机考研经验总结,北邮计算机专考研经验总结.docx
  15. iOS 常用动画第三方
  16. 如何求1^k+2^k+...+n^k
  17. android 实现打印功能,Android通过OTG线连接打印机实现打印功能
  18. 学微服务必经之路——Nacos新手入门(下)
  19. 安卓软件开发基础教学!写给1-3年安卓程序员的几点建议,跳槽薪资翻倍
  20. Druid的简介及功能?

热门文章

  1. 由电影Matrix(骇客帝国)联想到的操作系统知识
  2. Zhong__安装配置MySQL8.0
  3. JAVA MemCache 史无前例的详细讲解!看完包精通MEMCACHE!
  4. 宝塔linux面板时区不正确怎么修改
  5. Excel快速删除一列中的空行
  6. 移动开发:Android数据连接浅析
  7. 淘宝商品详情API接口,商品详情API接口接入说明
  8. 用Python爬取猫眼数据分析《无名之辈》
  9. 计算机服务老是需要重新启动,服务器重启遇到“你的电脑遇到问题,需要重新启动。我们只收集某些错误信息,然后你可以重新启动。(完成0%)”...
  10. QT窗口:透明与半透明、不规则异形窗口、控件透明与半透明、不规则异形按钮