概述

之前介绍了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的方言(语法糖)的更多相关文章

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

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

  2. Ruby的语法糖

    发现Ruby的语法糖好多,比如函数调用,参数列表可以写括号和不写括号.代码块可以用do end 或者 {}.   还有 if,unless后置.等等. 如果看Ruby代码看多了,你会发现,它很多地方的 ...

  3. 探索C#之6.0语法糖剖析

    阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...

  4. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  5. 看看C# 6.0中那些语法糖都干了些什么(终结篇)

    终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...

  6. 看看C# 6.0中那些语法糖都干了些什么(中篇)

    接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...

  7. 看看C# 6.0中那些语法糖都干了些什么(上篇)

    今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...

  8. C# 6.0新特性---语法糖

    转载:http://www.cnblogs.com/TianFang/p/3928172.html 所谓语法糖就是在编译器里写做文章,达到简化代码书写的目的,要慎重使用,省略过多不易理解. NULL检 ...

  9. C#语法糖,让编程更具乐趣

    一.什么是语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法 ...

  10. Java语法糖4:内部类

    内部类 最后一个语法糖,讲讲内部类,内部类指的就是在一个类的内部再定义一个类. 内部类之所以也是语法糖,是因为它仅仅是一个编译时的概念,outer.java里面定义了一个内部类inner,一旦编译成功 ...

随机推荐

  1. Qt之QHeaderView加入复选框

    简述 前面分享了QTableView中怎样加入复选框. 本节主要介绍QTableView中的表头-QHeaderView加入复选框的功能,以下以水平表头为例.垂直表头相似! 简述 效果 QHeader ...

  2. Order笔记-数据库创建

    过程: 1,为这个项目新建一个用户名(实例),专门用于这个项目 2,建表 问题: 列在此处不允许: 笔记: 建表设置默认值: alter table 表名 modify 字段名 default 默认值 ...

  3. AJAX跨域问题解决---后台解决

    对于ajax请求数据,经常出现一个坑,防不胜防.今天突然找到一个很好的解决办法,直接在后台设置资源共享就可以了. 代码为:response.raw().setHeader("Access-C ...

  4. 本地IIS

    一,搭建IIS 要建立本地的IIS需要进行以下操作(包括显示.NET): 开始=>控制面板(查看方式为类别)=>程序=>程序和功能=>左边的打开或关闭Windows功能选中以下 ...

  5. Python:list 和 array的对比以及转换时的注意事项

    Python:list 和 array的对比以及转换时的注意事项 zoerywzhou@163.com http://www.cnblogs.com/swje/ 作者:Zhouwan 2017-6-4 ...

  6. NodeJs学习笔记(五)---单元测试补充

    今天早上继续研究Mocha,忽然发现一个问题,我的大部分程序都是需要登录验证的,所以需要预先登录之后才能进行下一步测试,就开始在网上找答案,发现没有这种资料,很疑惑,最后发现其实是自己太笨了,因为这个 ...

  7. 《奇思妙想:15位计算机天才及其重大发现》【PDF】下载

    <奇思妙想:15位计算机天才及其重大发现>[PDF]下载链接: https://u253469.ctfile.com/fs/253469-231196328 内容简介 本书介绍了15位当代 ...

  8. go实例之轻量级线程goroutine、通道channel与select

    1.goroutine线程 goroutine是一个轻量级的执行线程.假设有一个函数调用f(s),要在goroutine中调用此函数,请使用go f(s). 这个新的goroutine将与调用同时执行 ...

  9. iOS通用链接(Universal Links)突然点击无效的解决方案

    接上文<微信中通过页面(H5)直接打开本地app的解决方案>已经把iOS搞定并且已经正常能跑了,突然就再也用不了了... 问题描述 测试告诉我,如果从微信打开App之后,点击App右上角的 ...

  10. ArcGIS API for JavaScript 4.2学习笔记[24] 【IdentifyTask类】的使用(结合IdentifyParameters类)(第七章完结)

    好吧,我都要吐了. 接连三个例子都是类似的套路,使用某个查询参数类的实例,结合对应的Task类,对返回值进行取值.显示. 这个例子是Identify识别,使用了TileLayer这种图层,数据来自Se ...