Kotlin的基础语法,开始学习Kotlin,可以类比Java语言,但不能被Java的思维模式固定。
1. 导包
和java一样,导包都是在文件的顶部
package my.demo import java.util.*2.定义功能函数
带Int类型返回值的函数 fun sum(a: Int, b: Int): Int { return a + b }执行结果:调用传入3和5,返回8
表达式作为函数体,返回值类型根据自动判断 fun sum(a: Int, b: Int) = a + b执行结果:调用传入3和5,返回8
为返回值函数 fun printSum(a: Int, b: Int): Unit { println("sum of $a and $b is ${a + b}") }执行结果:sum of -1 and 8 is 7 相信你也看到了,$类似java中的字符串拼接符,但可读性更高
同意像java一样无返回值的时候Unit可以省略不写 fun printSum(a: Int, b: Int) { println("sum of $a and $b is ${a + b}") }执行结果:sum of -1 and 8 is 7 3.变量的声明
常量java中声明常量需要用到final,而Kotlin中只需要用到val,同意的只能赋值一次
val a: Int = 1 // 声明的同时赋值 val b = 2 // 自推断数据类型为Int val c: Int // 当不提供初始值时,需要指定数据类型 c = 3 // 声明之后赋值 变量可以多次赋值
var x = 5 // 自推断数据类型为Int x += 14.注释 和java中没有区别
/** * 文档注释 * @param a */ fun add(a: Int) { /* 多行注释 */ println("测试") //单行注释 var a=2 }5.使用字符串模板 还记的java中的字符串拼接吗?对于程序员来说阅读和书写都有一定的麻烦,Kotlin完全解决了这种问题使用$
var a = 1 // 定义一个字符串变量,模板表示一个变量 val s1 = "a is $a" a = 2 // 使用模板表示一个表达式, val s2 = "${s1.replace("is", "was")}, but now is $a"输出:a was 1, but now is 2 需要拼接变量直接跟变量名称,拼接表达式需要用{},字符串中会获取具体的值。
6.使用条件表达式 和java相同的地方
var max = a if (a < b) max = b // 带 else var max: Int if (a > b) { max = a } else { max = b }和java不同的就是,可以作为一个表达式,来给变量或者方法赋值
//变量赋值 fun maxOf(a: Int, b: Int) = if (a > b) a else b //变量赋值 var max=if (a > b) a else b7.使用可空值
//如果这样直接给一个不能为空的值赋值为空,是不能通过编译的 var a:Int a=null //使用数据类型?后可以,表示,结果可以为空 var a:Int? a=null同样对于方法也是可以的 如:
/** *返回值可以为空 */ fun parseInt(str: String): Int? { // ... } //使用上面的解析方法 fun printProduct(arg1: String, arg2: String) { val x = parseInt(arg1) val y = parseInt(arg2) // Using `x * y` yields error because they may hold nulls. if (x != null && y != null) { // x and y are automatically cast to non-nullable after null check println(x * y) } else { println("either '$arg1' or '$arg2' is not a number") } }8.类型检查和自动转换 在java中使用instance关键字来判断一个对象是否属于一个类或者接口,在Kotlin中使用is,并且检查之后的类型会自动转换为该类型
fun getStringLength(obj: Any): Int? { if (obj is String) { // 对象obj,在这个分支内,会自动转换为String类型 return obj.length } //分支外,obj对象依旧是Any类型 //返回值Int,可以为空 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 }可以说当使用is关键字判断一个对象是否属于某种类型的时候,如果是,该对象会自动转换为对应类型。
9.使用for循环 for循环遍历任何提供迭代器的东西。语法如下所列
//一个list集合 var list = listOf<String>("你好","不好","很好") //for循环 ,语法用in关键字 for (str in list) //输出每次取出的结果 println("value = $str")和java中一样,当只有一条循环语句的时候,可以省略大括号,否则不省略
var list = listOf<String>("你好","不好","很好") for (str in list){ println("value = $str") println(str) }如果你想遍历集合或者数组的下标索引,可以用下面的方法
var list = listOf<String>("你好","不好","很好") for (str in list.indices){ println("value = $str") }输出结果: value = 0 value = 1 value = 2 如果想同时遍历下标和值,可以这样:
var list = listOf<String>("你好","不好","很好") for ((index,str) in list.withIndex()) println("index = $index ,value = $str")输出结果 index = 0 ,value = 你好 index = 1 ,value = 不好 index = 2 ,value = 很好
10.while 和 do…while 和java中的用法一样
while (x > 0) { x-- } do { val y = retrieveData() } while (y != null) // y is visible here!11.when表达式 Kotlin中取消了switch语句,用when来表达最简单的开关语句
//函数功能,根据传递的内容,返回某个值 fun describe(obj: Any): String = when (obj) { 1 -> "1" "Hello" -> "问候语" is Long -> "Long类型数据" !is String -> "不是String类型数据" else -> "未知" }is用来判断对象类型,相当于java中的instance。可以看到when同样可以和if语句进行转换
同样可以进行多个匹配条件,不同条件之间用逗号隔开
when (x) { 0, 1 -> print("x == 0 or x == 1") else -> print("otherwise") }匹配条件也可以是一个函数
when (x) { parseInt(s) -> print("s encodes x") else -> print("s does not encode x") }匹配条件也可以是某个范围的值
when (x) { in 1..10 -> print("x is in the range") in validNumbers -> print("x is valid") !in 10..20 -> print("x is outside the range") else -> print("none of the above") }12.使用范围 表示范围关键字用.. ;要判断一个数是否属于某个范围,用in关键字
val x = 4 if (x in 1..10) { println("fits in range") }判断一个数不在某个范围
val x = 4 if (x !in 1..10) { println("not in range") }Kotlin默认遍历是升序,想倒序可以:
for (i in 4 downTo 1) print(i) // prints "4321"Kotlin默认递增递减是1,可以使用 step来设置:
for (i in 4 downTo 1 step 2) print(i) // prints "42"如果想表示范围不包括最后的一个值,用 until 表示
for (i in 1 until 10) { // i in [1, 10), 10 不包括在内 println(i) }翻译的不好,请见谅。