博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kotlin的方言(语法糖)
阅读量:4975 次
发布时间:2019-06-12

本文共 3177 字,大约阅读时间需要 10 分钟。

概述

之前介绍了kotlin的快速入门,l 大多数还是参照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
) { 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
) { someCall("lizo",18)}

在一个方法阿尤多个默认值的时候,可以选择性的赋值(但没有默认值的参数必须传递)

fun someCall(var1: String = "default1", var2: Int, var3: String = "default2") {    print("$var1,$var2,$var3")}fun main(args: Array
) { 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) { ... }  // 闭区间:包含100for (i in 1 until 100) { ... } // 不包含100for (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"]) //getmap["key"] = value //set

延迟加载

有些属性我们希望可以延迟加载,可以是用 by lazy属性(必须是val修饰的变量)

class Clazz() {    val p: String by lazy {        println("lazy!")        "haha"    }}fun main(args: Array
) { var clazz = Clazz() println(clazz.p) println(clazz.p)}

输出

lazy!

haha
haha

类扩展方法

kotlin中支持对一个类的方法进行扩展

fun String.myToLowerCase(): String {    return this.toLowerCase()}fun main(args: Array
) { 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()}

转载于:https://www.cnblogs.com/lizo/p/7244220.html

你可能感兴趣的文章
RT3070 USB WIFI 在连接socket编程过程中问题总结
查看>>
MIS外汇平台荣获“2013年全球最佳STP外汇交易商”
查看>>
LeetCode 题解之Add Digits
查看>>
hdu1502 , Regular Words, dp,高精度加法
查看>>
SpringBoot在idea中的热部署配置
查看>>
MyEclipse连接SQL Server 2008数据库的操作方法
查看>>
JS验证图片格式和大小并预览
查看>>
laravel5.2 移植到新服务器上除了“/”路由 ,其它路由对应的页面显示报404错误(Object not found!)———新装的LAMP没有加载Rewrite模块...
查看>>
编写高质量代码--改善python程序的建议(六)
查看>>
windows xp 中的administrator帐户不在用户登录内怎么解决?
查看>>
接口和抽象类有什么区别
查看>>
Codeforces Round #206 (Div. 2)
查看>>
**p
查看>>
优先队列详解
查看>>
VS2012 创建项目失败,,提示为找到约束。。。。
查看>>
设计类图
查看>>
类对象
查看>>
[Voice communications] 声音的滤波
查看>>
SQL语言之概述(一)
查看>>
软件建模——第9章 毕业论文管理系统—面向对象方法
查看>>