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) return
print("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" -> 2
else -> 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
Kotlin语法(基础)的更多相关文章
- 五分钟学会 Kotlin 语法
为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受.因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人 ...
- JAVA 入门第一章(语法基础)
本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...
- python基础入门一(语法基础)
作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...
- PHP语法基础
1.PHP语法基础 PHP标记符 <?php ?> 常亮与变量 $a = 10; 变量 可以在运行过程中修改 $a = 10; $a = 20; $b = 5; echo $a+$b; c ...
- Verilog语法基础讲解之参数化设计
Verilog语法基础讲解之参数化设计 在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...
- C#语法基础和面向对象编程
1.C#语法基础 http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html 2.C#与面向对象基础 很棒的资源,简明扼要,介绍的非常清 ...
- Lua脚本之语法基础快速入门
要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...
- Javascript语法基础
Javascript语法基础 一.基本数据类型 JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...
- LinQ 语法基础
LINQ (Language-Integrated Query,语言集成查询). LINQ to Objects.LINQ to SQL.LINQ to DataSet和LINQ to XML,它们分 ...
- shell脚本语法基础汇总
shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...
随机推荐
- 原创:新手布局福音!微信小程序使用flex的一些基础样式属性
来源:新手布局福音!微信小程序使用flex的一些基础样式属性 作者:Nazi Flex布局相对于以前我们经常所用到的布局方式要好的很多,在做微信小程序的时候要既能符合微信小程序的文档开发要求,又能 ...
- Javascript内存泄露
在过去一些的时候,Web开发人员并没有太多的去关注内存泄露问题.那时的页面间联系大都比较简单,并主要使用不同的连接地址在同一个站点中导航,这样的设计方式是非常有利于浏览器释放资源的.即使Web页面运行 ...
- 第一篇博文:PHP函数原型中的可选参数写法为什么这么写?
第一篇,算是开始吧.简单写点儿东西. 刚开始学PHP,在看PHP Manual时遇到一个问题:含可选参数的函数原型中,可选参数的写法看不懂. 例如explode函数 array explode ( s ...
- Hibernate的session一级缓存
一级缓存是Session周期的,当session创建的时候就有,当session结束的时候,缓存被清空 当缓存存在的时候,每次查询的数据,都会放在缓存中,如果再次查询相同的数据,则不会再次查询数据库, ...
- Azure China (12) 域名备案问题
<Windows Azure Platform 系列文章目录> (1) 默认情况下,我们在创建的Azure 服务,默认使用的DNS地址为: http://xxx.chinacloudapi ...
- 基于HTML5的WebGL电信网管3D机房监控应用
先上段视频,不是在玩游戏哦,是规规矩矩的电信网管企业应用,嗯,全键盘的漫游3D机房: http://www.hightopo.com/guide/guide/core/3d/examples/exam ...
- HT for Web整合OpenLayers实现GIS地图应用
HT for Web作为逻辑拓扑图形组件自身没有GIS功能,但可以与各种GIS引擎即其客户端组件进行融合,各取所长实现逻辑拓扑和物理拓扑的无缝融合,本章将具体介绍HT for Web与开发免费的Ope ...
- Javascript对象创建
一.概述 虽然对象字面量可以用来创建对象,但在创建多个类似的对象时,不够优雅,不符合DRY原则. 二.创建对象 有以下几种模式: 1.工厂模式 2.构造函数模式 3.原型模式 4.组合构造函数和原型模 ...
- JavaScript基础—闭包,事件
Js基础-闭包,事件 1:js中的闭包 概念:在一个函数内部又定义了一个函数,内部函数能访问到外部函数作用域范围内的变量,这时这个内部函数就叫做闭包,无论这个内部函数在哪里被调用都能访问到外部函数作用 ...
- “Win10 UAP 开发系列”之 在MVVM模式中控制ListView滚动位置
这个扩展属性从WP8.1就开始用了,主要是为了解决MVVM模式中无法直接控制ListView滚动位置的问题.比如在VM中刷新了数据,需要将View中的ListView滚动到顶部,ListView只有一 ...