概述

之前介绍了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. QGIS2.18.0的精简编译

    1.下代码,下依赖库 - expat - fcgi - gdal - gsl-devel - iconv - openssl-devel - openssl-libs - pyqt4 - qca-de ...

  2. C++ stack

    stack 栈,一种后进先出的数据结构,在c++ stl里作为容器适配器,string,vector,deque,在内存中是连续的 声明方式 stack<int,deque<T>&g ...

  3. 二叉树的递归遍历 The Falling Leaves UVa 699

    题意:对于每一棵树,每一个结点都有它的水平位置,左子结点在根节点的水平位置-1,右子节点在根节点的位置+1,从左至右输出每个水平位置的节点之和 解题思路:由于上题所示的遍历方式如同二叉树的前序遍历,与 ...

  4. OpenXml读取word内容(三)

    内容和表格内容一起读: word内容: 代码: public static void ReadWordByOpenXml(string path) { using (WordprocessingDoc ...

  5. 简单的调用OpenCV库的Android NDK开发 工具Android Studio

    前言 本博客写于2017/08/11, 博主非专业搞安卓开发, 只是工作的需要倒腾了下Android NDK相关的开发, 博文中有什么不正确.不严格的地方欢迎指正哈    本文后续也许还会有删改, 就 ...

  6. 技术债务管理以及Firefox/Chromium的债务评价

    如今的软件开发是在遍地敏捷,人人讲唯快不破的时代,哪有人有时间思考代码质量,设计的质量? 哪个又不是从一堆代码中杀出血路来实现还有一个功能?一个产品都存活不了几年,何必考虑什么可维护性? 我们追求进度 ...

  7. 002Java概述

    1Sun(Stanford University Network )公司1995年推出的高级编程语言 2.面向Internet的编程语言 3.已经成为web应用程序的首选开发语言 4.完全面向对象简单 ...

  8. 【SqlServer系列】聚合函数

    1   概述 本篇文章简要回顾SQL Server  聚合函数,MAX,MIN,SUM,AVG,SUM,CHECKSUM_EGG,COUNT,STDEV,STDEVP,VAR,VARP. 2   具体 ...

  9. AntiXSS的作用

    XSS跨站脚本攻击        是指用户输入HTML编码对网站进行跨站攻击.            通过使用FCKeditor.FreeTextBox.Rich TextBox.Cute Edito ...

  10. 使用WebEx录制视频并转换为MP4

    1.下载并安装WebEx http://www.question-defense.com/wp-content/uploads/2010/05/ateditor-version-3.0.zip 2.打 ...