kotlin的方言(语法糖)
概述
之前介绍了kotlin的快速入门,http://www.cnblogs.com/lizo/p/7231167.html 大多数还是参照java。kotlin中提供了更多更方便的语言特性
这个方言其实是针对java而言,因为很多用法其实在其他语言里面是已经存在的。使用kotlin的这些方言能够在一定程度上提高你的开发效率
POJO类
在kotlin中定义class时候加上关键字data即可创建
//注意声明对象的成员变量的是加上val关键字
data class Persion(val name: String, val age: Int)
这种对象包含的方法有
- getter和setter方法
- equals()
- hashCode()
- toString()
- copy()
- 组成方法
组成方法
组成方法就是可以快速获取data对象方法,例如
data class Person(val name:String ,val age:Int) fun main(args: Array<String>) {
var p = Person("lizo",18);
println(p.component1()) //获取第一个成员变量
println(p.component2()) //获取第二个成立变量 var (name,age) = p; //把第一个和第二个变量分别赋值给 name 和age ,注意是根据顺序,而不是名字
println("name : $name ,age : $age")
}
输出
lizo
18
name : lizo ,age : 18
应用场景
例如使用一个方法返回多个参数的时候,就可以使用这个方法
data class Persion(val name: String, val age: Int)
fun someCall():Person{
...
return Person("lizo",18)
} val (name,age) = someCall()
方法默认值
在调用某些方法的时候,我们需要可以设置一些默认值
fun someCall(var1: String, var2: Int, var3: String = "default"){
print("$var1,$var2,$var3")
} fun main(args: Array<String>) {
someCall("lizo",18)
}
在一个方法阿尤多个默认值的时候,可以选择性的赋值(但没有默认值的参数必须传递)
fun someCall(var1: String = "default1", var2: Int, var3: String = "default2") {
print("$var1,$var2,$var3")
} fun main(args: Array<String>) {
someCall(var2 = 18,var3 = "lizo123")
}
类型判断
利用when的语法,进行实例类型判断
when(a){
is String -> print(a.length)
is Int -> print(a)
...
else -> throw RuntimeException();
}
遍历list/map
for (l in list) {
println("$l")
} for ((k, v) in map) {
println("$k -> $v")
}
使用数字区间
for (i in 1..100) { ... } // 闭区间:包含100
for (i in 1 until 100) { ... } // 不包含100
for (x in 2..10 step 2) { ... } // 按照步长为2增长
for (x in 10 downTo 1) { ... } //
if (x in 1..10) { ... } //判断x是否在1到10这个区间内
只读map和list
val list = listOf("a", "b", "c")
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
访问map元素
println(map["key"]) //get
map["key"] = value //set
延迟加载
有些属性我们希望可以延迟加载,可以是用 by lazy属性(必须是val修饰的变量)
class Clazz() {
val p: String by lazy {
println("lazy!")
"haha"
}
} fun main(args: Array<String>) {
var clazz = Clazz()
println(clazz.p)
println(clazz.p)
}
输出
lazy!
haha
haha
类扩展方法
kotlin中支持对一个类的方法进行扩展
fun String.myToLowerCase(): String {
return this.toLowerCase()
} fun main(args: Array<String>) {
println("tHIs iS TeST".myToLowerCase())
}
输出
this is test
这样做的好处就是在我们需要扩展某个类的方法时候,不用定义一个新的类去扩展,不好的地方一个类的扩展类也许或分布在多个地方。
null处理
在编码过程中很多地方都用到了对null处理,kotlin中提供了便捷操作方法去处理
//如果a为null,则整个a?.length都是null
print(a?.length);
如果需要在为null的情况下赋值
//当a为null的时候,b的值为default
var b = a?:"default"
如果需要判断当a不为null 到时候进行一些处理
a?.let{
//do some thing a != null
}
根据条件判断语句赋值
赋值(=)的时候,可以直接在后面放入条件语句
var a = if(b > 0){1}else{-1} val c = when (d){
"red" -> 1
"blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
} //函数返回
fun someCall(a:Int) = if(a>0){1}else if(){-1}
当用到一个对象的多个方法时候
通过使用with关键字,可以在范围内直接调用该方法
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
} val myTurtle = Turtle()
with(myTurtle) { //draw a 100 pix square
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
kotlin的方言(语法糖)的更多相关文章
- Kotlin 特性 语法糖 优势 扩展 高阶 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- Ruby的语法糖
发现Ruby的语法糖好多,比如函数调用,参数列表可以写括号和不写括号.代码块可以用do end 或者 {}. 还有 if,unless后置.等等. 如果看Ruby代码看多了,你会发现,它很多地方的 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- C#语法糖大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...
- 看看C# 6.0中那些语法糖都干了些什么(终结篇)
终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...
- 看看C# 6.0中那些语法糖都干了些什么(中篇)
接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...
- 看看C# 6.0中那些语法糖都干了些什么(上篇)
今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...
- C# 6.0新特性---语法糖
转载:http://www.cnblogs.com/TianFang/p/3928172.html 所谓语法糖就是在编译器里写做文章,达到简化代码书写的目的,要慎重使用,省略过多不易理解. NULL检 ...
- C#语法糖,让编程更具乐趣
一.什么是语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法 ...
- Java语法糖4:内部类
内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类. 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功 ...
随机推荐
- Qt之QHeaderView加入复选框
简述 前面分享了QTableView中怎样加入复选框. 本节主要介绍QTableView中的表头-QHeaderView加入复选框的功能,以下以水平表头为例.垂直表头相似! 简述 效果 QHeader ...
- Order笔记-数据库创建
过程: 1,为这个项目新建一个用户名(实例),专门用于这个项目 2,建表 问题: 列在此处不允许: 笔记: 建表设置默认值: alter table 表名 modify 字段名 default 默认值 ...
- AJAX跨域问题解决---后台解决
对于ajax请求数据,经常出现一个坑,防不胜防.今天突然找到一个很好的解决办法,直接在后台设置资源共享就可以了. 代码为:response.raw().setHeader("Access-C ...
- 本地IIS
一,搭建IIS 要建立本地的IIS需要进行以下操作(包括显示.NET): 开始=>控制面板(查看方式为类别)=>程序=>程序和功能=>左边的打开或关闭Windows功能选中以下 ...
- Python:list 和 array的对比以及转换时的注意事项
Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ...
- NodeJs学习笔记(五)---单元测试补充
今天早上继续研究Mocha,忽然发现一个问题,我的大部分程序都是需要登录验证的,所以需要预先登录之后才能进行下一步测试,就开始在网上找答案,发现没有这种资料,很疑惑,最后发现其实是自己太笨了,因为这个 ...
- 《奇思妙想:15位计算机天才及其重大发现》【PDF】下载
<奇思妙想:15位计算机天才及其重大发现>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196328 内容简介 本书介绍了15位当代 ...
- go实例之轻量级线程goroutine、通道channel与select
1.goroutine线程 goroutine是一个轻量级的执行线程.假设有一个函数调用f(s),要在goroutine中调用此函数,请使用go f(s). 这个新的goroutine将与调用同时执行 ...
- iOS通用链接(Universal Links)突然点击无效的解决方案
接上文<微信中通过页面(H5)直接打开本地app的解决方案>已经把iOS搞定并且已经正常能跑了,突然就再也用不了了... 问题描述 测试告诉我,如果从微信打开App之后,点击App右上角的 ...
- ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)
好吧,我都要吐了. 接连三个例子都是类似的套路,使用某个查询参数类的实例,结合对应的Task类,对返回值进行取值.显示. 这个例子是Identify识别,使用了TileLayer这种图层,数据来自Se ...