Kotlin学习(二)基本语法
2017-02-25 20:38
295 查看
定义包名(Basic Syntax)
与Java定义包名一样,在源文件的开头定义包名:package my.demo import java.util.* // ...
包名和文件夹路径可以不一致:源文件可以放在项目的任意位置。
定义函数(Defining functions)
与Java定义函数的区别在于:Kotlin在定义函数的时候要加个fun关键词,函数的返回值前后不同,Java的在前面,如
private int getResult(int a, int b) { return a + b; }
而Kotlin的话,要在后面写返回值,如
private getResult(a: Int, b: Int): Int { return a + b }
如果一个函数只有一个并且是表达式函数体并且是返回类型自动推断的话,可以直接这样写
fun getResult(a: Int, b: Int) = a + b // 这里的函数没有写返回值,以为Kotlin会自动判断返回值类型
如果函数返回一个无意义的值,相当于Java的
void,则可以这样写
fun getResult(a: Int, b: Int): Unit { print(a + b) }
Uint 的返回类型可以省略
fun getResult(a: Int, b: Int) { print(a + b) }
定义局部变量(Defining local variables)
Kotlin声明变量与Java声明变量有些不一样,Java变量类型在前,变量名在后,而Kotlin则相反,变量名在前,变量类型在后,中间加:(冒号),并且Kotlin可以自动判断变量的类型。声明常量(常量使用
val关键字)
val a: Int = 1 val b = 1 // 自动判断出Int类型 val c: Int // 当没有初始化值的时候要声明类型 c = 1 // 赋值
声明变量(变量使用
var关键字)
var x = 5 // 自动推断出Int类型 x += 1
注释(Comments)
Kotlin的注释与Java一样, 支持单行注释和块注释。// 单行注释 /* 这是一个 块注释 */
使用字符串模版(Using string templates)
使用${变量},如变量为args: Array<String>",使用的时候可以这样写
fun main(args: Array<String>) { if (args.size == 0) return print("First argument: ${args[0]}") }
而不用再去用加号加起来,gradle里面也是支持的
fun main(args: Array<String>) { if (args.size == 0) return print("First argument: " + args[0]) }
使用条件表达式(Using conditional expressions)
使用if表达式的时候这样写
fun max(a: Int, b: Int): Int { if (a > b) { return a } else { return b } }
前面说过,如果一个函数只有一个并且是表达式函数体并且是返回类型自动推断的话,可以直接这样写
fun getResult(a: Int, b: Int) = a + b
那么加上
if表达式的话,可以这样写
fun max(a: Int, b: Int) = if (a > b) a else b
使用可空变量和空置检查(Using nullable values and checking for null)
当一个变量、函数可能出现空值的时候,应该指出该引用可空,如fun getResult(a: Int, b: Int): Int? { // 设置函数返回类型可空 print(a + b) return null }
使用类型检查和自动转换(Using type checks and automatic casts)
is运算符是检查一个表达式是否是某个类型的实例,如果为不可变局部变量或属性进行类型检查,则无需显式转换
fun getStringLength(obj: Any): Int? { if (obj is String) { // `obj`在这个分支中自动转换为`String`类型 return obj.length } // `obj`仍然是`Any`类型 return null }
或者
fun getStringLength(obj: Any): Int? { if (obj !is String) return null // `obj`在这个分支中自动转换为`String`类型 return obj.length }
也可以这样
fun getStringLength(obj: Any): Int? { // `obj` 自动转换成`String`类型,并且在&&后面生效 if (obj is String && obj.length > 0) { return obj.length } return null }
使用for
循环(Using a for loop)
与Java相比,Kotlin使用for循环要更加的简洁
fun main(args: Array<String>) { for (arg in args) { // in操作符可以判断是否arg是否在args里面 print(arg) } }
或者这样写
for (i in args.indices) { print(args[i]) }
使用while
循环(Using a while loop)
while循环与Java一样
fun main(args: Array<String>) { var i = 0 while (i < args.size) { print(args[i++]) } }
使用when
表达式(Using when expression)
when表达式就相当于Java的
switch表达式,省去了
case和
break,并且支持各种类型。
fun cases(obj: Any) { when (obj) { 1 -> print("One") //如果obj的值为1 "Hello" -> print("Greeting") // 如果obj的值为hello is Long -> print("Long") // 如果obj的类型是Long类型 !is String -> print("Not a string") // 如果obj的类型不属于String类型 else -> print("Unknown") // 默认,相当于switch的default } }
使用ranges(Using ranges)
使用in运算符检查数字是否在范围内if (x in 1..y-1) { //1..y-1表示1到y-1的范围 print("OK") }
使用!in运算符检查数值是否在范围外
if (x !in 0..array.lastIndex) { print("Out") }
使用集合(Using collections)
循环输出一个集合里面的值或者判断集合里面是否包含某个变量for (name in names) { // 将会调用nemes.contains(name)方法 println(name) }
使用lambda表达式过滤和映射集合
// it表示name names .filter { it.startsWith("A") } .sortedBy { it } .map { it.toUpperCase() } .forEach { print(it) }
后话
基本语法就学到这里。相关文章推荐
- Kotlin学习(一)基本语法
- Kotlin 学习笔记(1)基本语法
- kotlin 学习记录 基本语法 (3)
- Kotlin学习(2):基本语法
- kotlin学习-基本语法(二)
- kotlin学习(一)kotlin的基本句法语法
- kotlin学习--基本语法
- Android开发,Kotlin的了解与学习(四)-----基本语法之方法、操作符
- kotlin 学习记录 基本语法(1)
- kotlin基本语法--kotlin官网文档学习
- Kotlin学习——基本语法
- Kotlin 学习笔记(一) 基本类型和基本语法
- kotlin的基本语法学习
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合
- Android开发,Kotlin的了解与学习(五)-----基本语法之集合相关
- Kotlin开发语言学习(2)基本语法
- kotlin 学习记录 基本语法 (4 类和继承)
- kotlin 学习记录 基本语法 (2)
- kotlin 学习笔记(基本语法)1
- 一个Swifter的Kotlin学习——Kotlin 基本语法