Kotlin技巧与自定义语法糖


kotlin,ktx,anko

kotlin官方中文站:http://www.kotlincn.net/docs/reference/basic-syntax.html
ktx google官网:https://developer.android.google.cn/kotlin/ktx
anko github地址:https://github.com/Kotlin/anko

kotlin数组使用

不用使用String[]; 需要使用arrayOf()

//1.数组和集合定义
val names = arrayOf<String>("2", "3")
val ages = listOf<Int>(1, 2, 3)
//访问
names[0]
ages[0]
//MutableList()和List

使用if,when表达式简化代码

//2.使用if,when表达式返回值
val invalid = isInvalid(2)
val age = getAge("x")
private fun isInvalid(num: Int): Boolean =if (num > 3) {true} else if (num > 2) {false} else {false}
private fun getAge(name: String): Int {return when (name) {"xx" -> 3else -> 10}
}

减少重载方法,使用参数默认值

//3.使用函数默认参数
createUser("xx", 3)
createUser("qq")
private fun createUser(name: String, age: Int = 18) {
}

steam式操作

//4.steam流式操作
ages.filter { it > 3 }.map { (it * 3).toString() }.forEach { print(it) }

kotlin内部类与嵌套类

//5.内部类和嵌套类
MainInterface().fetchContext().takeIf { it == this }
MainEntity().fetchContext().takeIf { it == null }
//inner内部类,持有外部实例,可以调用外部方法
inner class MainInterface {fun fetchContext(): Context {return this@MainActivity}
}
//嵌套类,只是写在一个文件里面,和另写一个文件没区别
class MainEntity {fun fetchContext(): Context? {//报错,找不到MainActivity实例return this@MainActivityreturn null}
}

foreach break

//6.foreach
ages.forEach {if (it > 3) {for (name in names) {if (name == "xx") {continue}break}}
}

高阶函数与lambda

//7.高阶函数与lambda
AlertDialog.Builder(this).setTitle("提示").setMessage("有新版本升级@").setCancelable(true).setPositiveButton("确定") { dialog, _ ->//跳转页面dialog.dismiss()}.create().show()
val alertDialog = showDialog {setTitle("提示")setMessage("")setCancelable(true)setPositiveButton("确定") { dialog, _ ->//跳转页面dialog.dismiss()}
}
val alertDialog1 = showDialog1 {it.setTitle("提示")it.setMessage("")it.setCancelable(true)it.setPositiveButton("确定") { dialog, _ ->//跳转页面dialog.dismiss()}
}private fun showDialog(block: AlertDialog.Builder.() -> Unit): AlertDialog {val builder = AlertDialog.Builder(this)block.invoke(builder)val alertDialog = builder.create()alertDialog.show()return alertDialog
}
private fun showDialog1(block: (AlertDialog.Builder) -> Unit): AlertDialog {val builder = AlertDialog.Builder(this)block.invoke(builder)val alertDialog = builder.create()alertDialog.show()return alertDialog
}

handler.post()和handler.post{}区别

实战1

//8.实战1:创建jsonObject封装
val jsonObject = JSONObject()
jsonObject.put("key1", "value1")
jsonObject.put("key2", "value2")
createJson("key1" to "value1","key2" to 1001,"key2" to createJson("inner1" to "")
)
private fun <V> createJson(vararg pairs: Pair<String, V>): JSONObject =JSONObject().apply {for ((key, value) in pairs) {put(key, value)}}

实战2

//8.实战2:Notification封装
val builder = NotificationCompat.Builder(this, "").setSmallIcon(R.mipmap.ic_launcher).setContentTitle("通知").setContentText("有新版本更新!").setPriority(NotificationCompat.PRIORITY_DEFAULT)
NotificationManagerCompat.from(this).notify(1,builder.build())

自定义View时构造函数问题

class ChapterListView @JvmOverloads constructor(val mContext: Context, attrs: AttributeSet? = null
) : LinearLayout(mContext, attrs) {}

Kotlin 重载个方法,还有两幅面孔,省代码的同时也带来一个深坑 | Kotlin 原理

kotlin小技巧

  1. 函数内部定义函数,缩小方法作用域
  2. AbDialog 类似高阶函数 lambda

Kotlin技巧与自定义语法糖相关推荐

  1. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

  2. Kotlin 特性 语法糖 优势 扩展 高阶 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  3. Kotlin 中的 run、let、with、apply、also、takeIf、takeUnless 语法糖使用和原理分析

    这些Kotlin的语法糖函数经常用,但也很容易搞混,所以转载一下,若混了可以回来再看 转载自公众号:纸上浅谈 正文: 在 Kotlin 有一些可以简化代码的语法糖,比如 run.let.with.ap ...

  4. Kotlin(三) 语法糖

    在上篇函数中,我们知道了如何定义函数,那么现在定义个函数,取两个数中比较大的数: fun  getMaxNum(a : Int,b : Int)  : Int {       return max(a ...

  5. javascript语法糖_语法糖和JavaScript糖尿病

    javascript语法糖 by Ryan Yurkanin 瑞安·尤卡宁(Ryan Yurkanin) 语法糖和JavaScript糖尿病 (Syntactic Sugar and JavaScri ...

  6. 浅析java中的语法糖

    概述 编译器是一种计算机程序, 它主要的目的是将便于人编写.阅读.维护的高级计算机语言所写的源代码程序, 翻译为计算机能解读.运行的低阶机器语言的程序, 即可执行文件.而 javac 就是java语言 ...

  7. Java语法糖之foreach

    语法糖是一种几乎每种语言或多或少都提供过的一些方便程序员开发代码的语法,它只是编译器实现的一些小把戏罢了,编译期间以特定的字节码或者特定的方式对这些语法做一些处理,开发者就可以直接方便地使用了.这些语 ...

  8. java for 迭代器_Java基础-迭代器Iterator与语法糖for-each

    迭代器Iterator与语法糖for-each 一.为什么需要迭代器 设计模式迭代器 迭代器作用于集合,是用来遍历集合元素的对象.迭代器不是Java独有的,大部分高级语言都提供了迭代器来遍历集合.实际 ...

  9. 三、Vue组件化开发学习笔记——组件化的基本步骤、全局组件和局部组件、父组件和子组件、注册组件的语法糖、模板分离写法、组件的数据存放

    一.什么是组件化? 人面对复杂问题的处理方式: 任何一个人处理信息的逻辑能力都是有限的 所以,当面对一个非常复杂的问题时,我们不太可能一次性搞定一大堆的内容. 但是,我们人有一种天生的能力,就是将问题 ...

最新文章

  1. 如何运用下载来的模板
  2. Hbase写入量大导致region过大无法split问题
  3. Spring Boot——易班优课YOOC课群在线测试自动答题解决方案(二)答案储存
  4. JavaScript-简单的页面输入控制
  5. Elo rating system(Elo 打分体系)
  6. 《Spring揭秘》读后感
  7. Matlab 取整函数
  8. 【Mendeley】自定义文献引用格式(cite style)并保存
  9. Android Gmail签名客制化
  10. 高通SDX12:跨子系统数据共享实例分享
  11. 券商卖的雪球票息高,券商赚的什么钱?(雪球原理入门)
  12. 秋天NET快速强签名工具V1.1
  13. FastAPI + tortoise-orm基础使用
  14. Fcoin事件背后的良心与底线
  15. 什么是云效,云原生时代新 DevOps 平台
  16. 孩子快抓住妈妈的手 -- 转载
  17. 多目标优化-Pareto遗传算法
  18. 从0开始学习C语言————数组、进制转换、函数
  19. 计算机网络位置网盘怎么登陆,百度网盘使用小技巧,超全超详细!新手必备
  20. 2019中兴校招面经整理

热门文章

  1. 电脑系统怎么重装win10家庭版的系统
  2. Android 朋友圈九宫格展示图片
  3. python hmac_Python之hmac模块的使用
  4. c语言和python实用性_C语言和Python语言,那个更好?
  5. Unity——小地图实现的办法
  6. RabbitMQ之Shovel配置(python模拟Producer、Consumer)
  7. java电商项目模块介绍,请查收
  8. R语言循环语句while和repeat
  9. 《冬吴同学会》学习笔记
  10. 返校了,新学年开始了~~