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,一旦编译成功 ...
随机推荐
- Ali RocketMQ与Kafka对照
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件,使用Mysql作为消息存储媒介.可全然水平扩容,为了进一步减少成本.我们觉得存储部分能够进一步优化,2011年初,Linkin开源了Kaf ...
- Bootstrap全局CSS样式之排版
Bootstrap能全然友好的支持html5的文本元素,这里不再赘述,详细可參考我还有一篇文章<html的文本元素总结>,这里主要针对Bootstrap封装好的CSS文本样式做一下汇总. ...
- hdu5353 Average
Problem Description There are n soda sitting around a round table. soda are numbered from 1 to n and ...
- Array的基本操作
准备饿补基础技术,先来个数组的总结. 1 .合并操作 concat : var C = A.concat(B); 用A数组合并B数组,生成新的C数组. 循环插入 ...
- 自学Python2.2-基本数据类型-列表list(object)
Python List方法总结 一. 列表简介: 列表是序列对象,可包含任意的Python数据信息,如字符串.数字.列表.元组等 列表的数据是可变的,我们可通过对象方法对列表中的数据进行增加.修改 ...
- 企业级PPTP服务器
第一个里程碑:检查系统是否支持ppp [root@m01 ~]# cat /dev/ppp cat: /dev/ppp: No such device or address 如果出现以上提示则说明pp ...
- Sphinx学习笔记(一)
最近负责一个项目,需要用到全文检索,我的环境大体如下: 1.数据保存在MySQL中 2.需要支持中文检索 3.尽可能的简单 选择了Sphinx,至于solr和E ...
- EditText禁用系统键盘,光标可以继续使用
在项目中有时候需要使用到自己的键盘,那这个时候就不希望系统键盘在弹出,而且光标还要继续显示,其实一个方法就可以简单实现 /** * 禁止Edittext弹出软件盘,光标依然正常显示. */ publi ...
- 【bird-front】前端框架介绍
bird前端项目,基于react.antd.antd-admin,封装常用数据组件,细粒度权限解决方案. bird-front是基于react的后台管理系统前端项目,框架构建部分严重借鉴于antd管理 ...
- MongoDB集群搭建-副本集
MongoDB集群搭建-副本集 概念性的知识,可以参考本人博客地址: 一.Master-Slave方案: 主从: 二.Replica Set方案: 副本集: 步骤:(只要按步骤操作,100%成功) 1 ...