Kotlin语法(基础)
一、基础语法:
1. 定义包名:
包名应该在源文件的最开头,包名不必和文件夹路径一致:源文件可以放在任意位置。
package my.demo
2. 定义函数:
fun sum(a: Int , b: Int) : Int{return a + b
}
表达式函数体自动推断型的返回值:
fun sum(a: Int, b Int) = a + b
要想函数在模块外面可见就必须有一个确定的返回值:
public fun sum(a: Int, b: Int): Int = a + b
Unit相当于Java中的void,可省略
3. 定义变量:
var a: Int = 1
,普通变量val a: Int = 1
,只读变量,相当于Java中的finalvar a = 1
,可推导出Int类型
4. 字符串模板
fun main(args: Array<String>) {if (args.size() == 0) returnprint("First argument: ${args[0]}")
}
换行:\n
三个引号包(""")裹的,不包含分割符并且可以包含其它字符:
val text = """for (c in "foo")print(c)
"""
5. if语句
除了类似Java的用法,还可以当作表达式:
fun max(a: Int, b: Int) = if (a > b) a else b
可直接返回if结果:
fun foo(param: Int){val result = if (param == 1) {"one"} else if (param == 2) {"two"} else {"three"}
}
6. 可空变量以及空值检查
声明可空变量:var a:Int? = null
函数返回可空:
fun parseInt(str : String): Int?{
}
调用时自动检查null:
val files = File("Test").listFiles()
println(files?.size)
调用时自动检查null(可设置如果为null时的默认值):
val files = File("test").listFiles()
println(files?.size ?: "empty")
如果为空执行某操作:
val data = ...
val email = data["email"] ?: throw
IllegalStateException("Email is missing!")
如果不为空执行某操作:
val date = ...
data?.let{...//如果不为空执行该语句块
}
7. 使用值检查
is
:相当于Java中的instanceof, 是否是某个类型的实例。如果对一个不可变的局部变量属性检查是否是某种特定类型,就没有必要明确转换
8. 循环
for (arg in args){print(arg)
}
While
等循环与Java一样
9. When表达式
相当于Java中的switch case,但是更强大。
fun cases(obj: Any) {when (obj) {1 -> print("one")"hello" -> print("Greeting")is Long -> print("Long")! is Long -> print("Not a string")else -> print("Ubknow")}
}
可直接返回when的判断结果:
fun transform(color: String): Int {return when(color) {"Red" -> 0"Green" -> 1"Blue" -> 2else -> throw IllegalArgumentException("Invalid color param value")}
}
10. ranges & in
检查 in 操作符检查数值是否在某个范围内(同样适用于集合):
if (x in 1..100){print("${x} in 1~100")
}
if (x !in 1..100){print("${x} not in 1~100")
}
使用 in 操作符检查集合中是否包含某个对象:
if (text in names) //将会调用nemes.contains(text)方法print("Yes)
遍历 map:
for ((k, v) in map) {print("$k -> $v")
}
11. 函数默认值
fun foo(a: Int = 0, b: String = "") {...}
12. 过滤 list
val positives = list.filter { x -> x >0 }
或者更短:
val positives = list.filter { it > 0 }
13. 只读 list/map
val list = listOf("a", "b", "c")
或者:
val map = maoOf("a" to 1, "b" to 2, "c" to 3)
获取map中的值:
println(map["key"])
map["key"] = value
14. 扩展函数(给现有类增添新函数)
fun String.spcaceToCamelCase() { ... }
"Convert this to camelcase".spcaceToCamelCase()
15. 创建单例模式
object Resource {val name = "Name"
}
16. try-catch
try {count()}catch (e: ArithmeticException) {throw IllegaStateException(e)}
可直接返回try-catch结果:
fun test() {val result = try {count()}catch (e: ArithmeticException) {throw IllegaStateException(e)}//处理 result
}
17. 返回与跳转
return break 结束最近的闭合循环 continue 跳到最近的闭合循环的下一次循环。
使用标签快速跳转:
loop@ for(i in 1..5){println("-i: $i")for(j in 11..17){if(14 == j){break@loop}println("-> j: $j")}}
输出:
-i: 1
-> j: 11
-> j: 12
-> j: 13
break 是跳转标签后面的表达式,continue 是跳转到循环的下一次迭代。
return 允许我们返回到外层函数。最重要的例子就是从字面函数中返回。
参考:
- http://kotlinlang.org/docs/reference/basic-syntax.html
- http://huanglizhuo.gitbooks.io/kotlin-in-chinese
相关文章:

未来十年,人机交互将是重要的发展
编译 | 禾木木出品 | AI科技大本营(ID:rgznai100)机器人市场包括广泛且不断扩大的产品范围。经过多年的合作,可以预测机器人技术和机器人行业的未来发展。根据需求,专业服务应用将占据主要市场份额。客户行为的变化已成为行业发展…

20170507Linux七周二次课 io监控free ps 网络状态 抓包
七周二次课(5月7日)10.6 监控io性能10.7 free命令10.8 ps命令10.9 查看网络状态10.10 linux下抓包扩展tcp三次握手四次挥手 http://www.doc88.com/p-9913773324388.htmltshark几个用法:http://www.aminglinux.com/bbs/thread-995-1-1.html监控…

navicat for mysql导出表结构
show create table cm_events;

《新程序员003》正式上市!华为、阿里等 30+ 公司的云原生及数字化实战经验...
作者 | 唐小引出品 | 《新程序员》编辑部《新程序员 003:云原生和全面数字化实践》图书今日正式上市,纸书和电子书同步上架 CSDN 商城、New 程序员小程序、京东、当当等平台。这是由 50 余位技术专家共同创作,写给所有关注云原生和数字化的开…

sed及awk显示指定行内容
文件内容为[roottest1 test]# cat file.test 1 2 3 4 5 6 7 8 9 101. 显示第二行内容(指定行)1)sed[roottest1 test]# sed -n 2p file.test 22)awk[roottest1 test]# awk NR2 {print $0} file.test 2 [roottest1 test]# awk {if(NR2)print $0} file.t…
win10 spark+scala+eclipse+sbt 安装配置
转载请务必注明原创地址为:http://dongkelun.com/2018/03/... 1、首先安装配置jdk1.8以上,建议全部的安装路径不要有空格 2、安装spark 2.1 下载 下载地址:http://spark.apache.org/downloads.html,我下载的是 spark-2.2.1-bin-hadoop2.7.tgz…

jquery的live方法
live(type, [data], fn)手册API的介绍 jQuery 给所有匹配的元素附加一个事件处理函数,即使这个元素是以后再添加进来的也有效。 如下用 live给classclickme的元素绑定一个click事件: $(.clickme).live(click, function() { alert("Live handler ca…

碱基序列的儿子最长上涨
Font Size:Aa Aa AaDescription 给出一个由n个数组成的序列x[1..n],找出它的最长单调上升子序列的长度。即找出最大的长度m和a1, a2……,am,使得 a1 < a2 < … … < am 且 x[a1] < x[a2] < … … < x[am]。Input 先输入一个整数t&…

用 Python 写 3D 游戏,太赞了
作者 | 可可卷CSDN博客 | 可可卷vizard介绍Vizard是一款虚拟现实开发平台软件,从开发至今已走过十个年头。它基于C/C,运用新近OpenGL拓展模块开发出的高性能图形引擎。当运用Python语言执行开发时,Vizard同时自动将编写的程式转换为字节码抽象…

人人都能学会的python编程教程3:字符串和编码
字符串 在python3中已经全面支持中文。 由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取&…

基本MVC原理
参考《Pro PHP》 简单实现了一个mvc框架。 地址http://code.google.com/p/smallframework/自动加载的问题<?php function __autoload($class) { if(file_exists($class.".php")) { require_once($class.".php"); } } class autoload{ public static fu…

31个好用的 Python 字符串方法,建议收藏!
作者 | 小F来源 | 法纳斯特字符串是Python中基本的数据类型,几乎在每个Python程序中都会使用到它。今天,就带大家学习一下31个最重要的内置字符串方法。希望大家能从中找到对自己有帮助的技巧。▍1、Slicingslicing切片,按照一定条件从列表或…

《深入理解计算机系统》读书随笔-位操作
最近开始读《深入理解计算机系统》这本书。对于书中提到的从程序员的角度解读计算机系统这一说法非常感兴趣,所以决定好好读一读。从开始接触计算机编程就是站在一个高级语言的层次,虽然对编译原理,操作系统,汇编语言和计算机组成…

专访小邪:从十年技术之路看阿里技术体系的变革
2019独角兽企业重金招聘Python工程师标准>>> 摘要: 从2008年到2018年,从阿里巴巴中间件团队到飞天八部——小邪与阿里的十年。 编者按:从2008年到2018年,从阿里巴巴中间件团队到飞天八部——小邪与阿里的十年。 2008年…

PHP SPL笔记
PHP SPL笔记作者: 阮一峰日期: 2008年7月 8日这几天,我在学习PHP语言中的SPL。这个东西应该属于PHP中的高级内容,看上去很复杂,但是非常有用,所以我做了长篇笔记。不然记不住,以后要用的时候&am…

算力超越 iPhone,芯片堪比Mac,网友:“买来能干啥?”
整理 | 郑丽媛出品 | CSDN(ID:CSDNnews)自去年“元宇宙”概念突然爆火,作为其“入门钥匙”的 AR/VR 设备也顺势成为了话题焦点,尤其在多家外媒爆料苹果也在为此发力、甚至从 Meta 挖人以争取在 2022 年正式推出时&…

ios开发日记- 5 屏幕截图
-(void)fullScreenshots{UIWindow *screenWindow [[UIApplication sharedApplication] keyWindow]; UIGraphicsBeginImageContext(screenWindow.frame.size);//全屏截图,包括window [screenWindow.layer renderInContext:UIGraphicsGetCurrentContext()]; UIImage …

MaxCompute助力OSS支持EB级计算力
一、 MaxCompute是什么? 你的OSS数据是否作堆积在一旁沉睡已久,存储成本变为企业负担?你是否想唤醒沉睡的数据,驱动你的业务前行?MaxCompute可以帮助你高效且低成本的解决这些问题,通过对海量数据进行分析和…

php自动加载
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。 在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试…

22个案例详解 Pandas 数据分析/预处理时的实用技巧,超简单
作者 | 俊欣来源 | 关于数据分析与可视化今天小编打算来讲一讲数据分析方面的内容,整理和总结一下Pandas在数据预处理和数据分析方面的硬核干货,我们大致会说Pandas计算交叉列表Pandas将字符串与数值转化成时间类型Pandas将字符串转化成数值类型Pandas当…

《mysql性能调优与架构设计》笔记: 一mysql 架构组成
2019独角兽企业重金招聘Python工程师标准>>> 2.1mysql物理文件组成 2.1.1日志文件: 1,查看mysql配置文件:mysql --verbose --help | grep -A 1 Default options; 1,错误日志:--log-error[file_name] 指定错…

发现一个可以搜索常用rpm包的地址(http://www.rpmfind.net/)
http://www.rpmfind.net/ 虽然资源不多,但也够用。 >如有问题,请联系我:easonjim#163.com,或者下方发表评论。<

PHP版UTF-8文件BOM自动检测移除程序
BOM信息是文件开头的一串隐藏的字符,用于让某些编辑器识别这是个UTF-8编码的文件。但PHP在读取文件时会把这些字符读出,从而形成了文件 开头含有一些无法识别的字符的问题。比如用UTF-8格式保存的生成图片的PHP文件,因为文件头隐藏的BOM信息也…

java: web应用中不经意的内存泄露
前面有一篇讲解如何在spring mvc web应用中一启动就执行某些逻辑,今天无意发现如果使用不当,很容易引起内存泄露,测试代码如下: 1、定义一个类App package com.cnblogs.yjmyzz.web.controller;import java.util.Date;public class…

「游戏圈地震级消息」687亿美元,微软收购游戏巨头动视暴雪
整理 | 苏宓、禾木木 出品 | CSDN 2022年1月18日晚,一条热搜刷爆了朋友圈: 继 2018 年,微软以 75 亿美元收购全球知名的代码托管平台 GitHub 后,2022 年 1 月 18 日,微软将以 687 亿美元的价格收购著名游戏制作和发行公…

java实现用户登录注册功能(用集合框架来实现)
需求:实现用户登录注册功能(用集合框架来实现) 分析: A:需求的类和接口 1.用户类 UserBean 2.用户操作方法接口和实现类 UserDao UserDaoImpl 3.测试类 UserTest B:各个类中的东西 1.用户类UserBean: …

第3次翻译了 Pandas 官方文档,叒写了这一份R万字肝货操作!
作者 | 黄伟呢来源 | 数据分析与统计学之美今天,我继续为大家讲述Pandas如何实现R语言的相关操作。由于 Pandas 旨在提供人们使用 R 进行的大量数据操作和分析功能,因此本页开始提供更详细的 R 语言及其与 Pandas 相关的许多第三方库的介绍。与 R 和 CRA…

PHP autoload机制详解
PHP autoload机制详解 转载自 jeakcccPHP autoload机制详解(1) autoload机制概述在使用PHP的OO模式开发系统时,通常大家习惯上将每个类的实现都存放在一个单独的文件里,这样会很容易实现对类进行复用,同时将来维护时也很便利。这 也是OO设计…

有关博客的一些断想
作者:朱金灿来源:http://blog.csdn.net/clever101随着微博、微信等短平快社交媒体的兴起,文字相对严肃的博客毫无疑问受到很大的冲击。我在想博客会不会因此而消亡呢。我相信不会,因为喜欢轻快的文字固然是人类的天性,…

pythonl学习笔记——爬虫的基本常识
1 robots协议 Robots协议(也称为爬虫协议、机器人协议等)的全称是“网络爬虫排除标准”(Robots Exclusion Protocol),网站通过Robots协议告诉搜索引擎哪些页面可以抓取,哪些页面不能抓取。 如: …