一、基础语法:

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中的final
  • var 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 允许我们返回到外层函数。最重要的例子就是从字面函数中返回。

参考:

  1. http://kotlinlang.org/docs/reference/basic-syntax.html
  2. http://huanglizhuo.gitbooks.io/kotlin-in-chinese

Kotlin语法(基础)的更多相关文章

  1. 五分钟学会 Kotlin 语法

    为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受.因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人 ...

  2. JAVA 入门第一章(语法基础)

    本人初学java 博客分享记录一下自己的学习历程 java我的初步学习分为六章,有c和c++的基础学起来也简便了很多. 第一章 语法基础 第二章 面向对象 第三章 常用工具类 第四章 文件操纵 第五章 ...

  3. python基础入门一(语法基础)

    作为自己正式接触并应用的第一门编程语言,在Alex和武sir两位大王的要求下,开始了写博客总结的日子.学习编程语言是很有趣的一件事情,但有2点请一定要谨记:1.做人靠自己,码代码也必须靠自己.能不能成 ...

  4. PHP语法基础

    1.PHP语法基础 PHP标记符 <?php ?> 常亮与变量 $a = 10; 变量 可以在运行过程中修改 $a = 10; $a = 20; $b = 5; echo $a+$b; c ...

  5. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  6. C#语法基础和面向对象编程

    1.C#语法基础 http://www.cnblogs.com/tonney/archive/2011/03/16/1986456.html 2.C#与面向对象基础 很棒的资源,简明扼要,介绍的非常清 ...

  7. Lua脚本之语法基础快速入门

    要 1.基本数据类型 2.Lua中的常用语句结构以及函数 3.Lua中的常用语句结构介绍 4.Lua中的库函数 目录[-] 一.基本数据类型 二.Lua中的常用语句结构以及函数 1.Lua中的常用语句 ...

  8. Javascript语法基础

    Javascript语法基础   一.基本数据类型   JavaScript中支持数字.字符串和布尔值三种基本数据类型: 1.数字 数字型是JavaScript中的基本数据类型.在JavaScript ...

  9. LinQ 语法基础

    LINQ (Language-Integrated Query,语言集成查询). LINQ to Objects.LINQ to SQL.LINQ to DataSet和LINQ to XML,它们分 ...

  10. shell脚本语法基础汇总

    shell脚本语法基础汇总 将命令的输出读入一个变量中,可以将它放入双引号中,即可保留空格和换行符(\n) out=$(cat text.txt) 输出1 2 3 out="$(cat te ...

随机推荐

  1. .NET Core中使用Razor模板引擎

    一.简介 在MVC以外的场景中,我们往往需要完成一些模板引擎生成代码或页面的工作:在以前我们一般常用的有Razor.NVeocity.VTemplate.虽然所有的模板系统都具有一些共同特征,但 Ra ...

  2. [译]学习IPython进行交互式计算和数据可视化(三)

    第二章 在本章中,我们将详细学习IPython相对以Python控制台带来的多种改进.特别的,我们将会进行下面的几个任务: 从IPython中使用系统shell以在shell和Python之间进行强大 ...

  3. 开源通信(C#)__

    GitHub中的README文件,使用markdown格式的文件. 下面简单介绍下相关语法: 大标题: =================================== 大标题一般显示工程名,你 ...

  4. Socket接收大数据的方法

    byte[] buffer = new byte[BufferSize]; int bytesRead; // 读取的字节数 MemoryStream msStream = new MemoryStr ...

  5. 【Remoting】.Net remoting方法实现简单的在线升级(上篇:更新文件)

    一.前言:       最近做一个简单的在线升级Demo,使用了微软较早的.Net Remoting技术来练手. 简单的思路就是在服务器配置一个Remoting对象,然后在客户端来执行Remoting ...

  6. C#操作XML学习之创建XML文件的同时新建根节点和子节点(多级子节点)

    最近工作中遇到一个问题,要求创建一个XML文件,在创建的时候要初始化该XML文档,同时该文档打开后是XML形式,但是后缀名不是.在网上找了好些资料没找到,只能自己试着弄了一下,没想到成功了,把它记下来 ...

  7. C#编程总结(七)数据加密——附源码

    C#编程总结(七)数据加密——附源码 概述 数据加密的基本过程就是对原来为明文的文件或数据按某种算法进行处理,使其成为不可读的一段代码,通常称为“密文”,使其只能在输入相应的密钥之后才能显示出本来内容 ...

  8. html5学习笔记(3)--主题结构元素-1

    Article元素 以下为对应代码: <!DOCTYPE html> <html> <head lang="en"> <meta char ...

  9. 孙鑫MFC学习笔记19:动态链接库

    1.动态链接库 2.静态库和动态库 3.使用动态链接库的好处 4.动态链接库编译需要导出,使用需要导入 __declspec(dllexport),__declspec(dllimport) 5.动态 ...

  10. FNV哈希算法

    由来:FNV哈希算法全名为Fowler-Noll-Vo算法,是以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的,最早在1991年提出. 特点和用途 ...