前言
- 之前和大家讲解了 Kotlin 语言下的项目封装等等,其中也多少简单的讲解了 Kotlin 的基本语法,现在,就让我带大家一起系统的学习 Kotlin 语法吧。
Hello World!
-
学习一门语言,当然得从 Hellow World 开始,在 Kotlin 中,只需要一个函数:
fun main(args: Array<String>) { println("Hello World!") }
-
从这段代码我们能看出什么?
- 关键字 fun 用来声明一个函数。没错,Kotlin 编程有很多乐趣(fun)。
- 参数的类型写在名称后面,稍后会看到,变量的声明也是这样。
- 函数的定义可以直接放在最外层,不必一定都在类内部。
- 数组就是类,和 Java 不同,Kotlin 中没有声明数组类型的特殊语法。
- 使用 println 替代了 System.out.println,Kotlin 对很多 Java 标准库的函数提供了很多语法更简洁的包装。
- 省略了每行代码后的分号。
函数
-
我们已经看到了如何声明一个没有返回任何东西的函数,那么如果函数有返回值呢?类型应该在哪?
fun max(a: Int, b: Int): Int { return if(a > b) a else b }
-
没错,和变量一致,类型也是在最后面。
在这里,我们可以看到 if 在 Kotlin 中与在 Java 中的不同。
在 Java 中,if 是语句,而在 Kotlin 中 if 是表达式。
和语句不同,表达式有值,并且能做另一个表达式的一部分使用。在 Kotlin 中,除了循环(for、do 和
do/while)以外,大多数控制结构都是表达式,我们可以在后面看到。
表达式函数体
-
可以让前面的函数更简单,因为他的函数体是单个表达式
fun max(a: Int, b: Int): Int = if(a > b) a else b
-
甚至还可以简化,省略返回类型
fun max(a: Int, b: Int) = if(a > b) a else b
-
在这里,编译器能够分析表达式,并把它的类型作为函数的返回类型。这种分析通常被称作类型推导。
变量
-
在 Java 中声明变量会以类型开始。但是在 Kotlin 中不行,Kotlin 中变量的类型在很多情况下都是可以省略的。
-
所以,在 Kotlin 中声明对象通常以关键字开始,然后是变量名,再然后是类型(不加也可以)。
val str = "qwerdf" val i = 42
-
这里省略了类型声明,就和表达式函数体一样,编译器能过分析出赋给变量的初始值,并把它的类型作为变量的类型,如果需要,你也可以显示地指明类型。
val str: String = "qwerdf"
-
如果变量没有初始值,那么就必须显示指明类型。
val i: Int i = 42
Kotlin 中声明变量的关键字有两个:
- val 不可变引用,初始化后不能再次赋值。与它对应的是 Java 中的 final 变量。
- var 可变应用,这种变量的值可以被改变,与它对应的是 Java 中的普通变量。
-
默认情况下,Kotlin 是推荐使用 val 关键字来声明变量的,仅在必要的时候使用 var 关键字。
-
在定义了 val 变量的代码块执行期间,变量只能进行唯一一次初始化,但是如果能够保证只有唯一一条初始化语句能被执行,可以根据条件使用不同的值来初始化它。
val msg: String if(isSuccess) { msg = "success" } else { msg = "failed" }
-
同时,因为 if 是表达式,所以你可以这样:
val msg = if(isSuccess) { "success" } else { "failed" }
-
表达式中,最后一行作为返回值。
-
另外 var 变量虽然值是可变的,但是类型不可变。
字符串模版
-
接下来向大家介绍 Kotlin 的一个新特性,就是字符串模版。
-
在代码中声明了一个变量 name,如果在字符串中使用到了它,那么 Java 中的字符串拼接:
("Hello, " + name + "!")
-
Kotlin 会怎么做?
("Hello, $name !")
-
这样效率一样,但是更紧凑,编译器会对表达式进行检查,如果你引用的变量不存在,就无法通过编译。
-
同样的还有 ${},你可以在大括号中写代码,调用方法,使用双引号等等。
-
这里引用了KotlinTest 项目中网络拦截部分拼接字符串的代码:
val logStr = StringBuilder() val json = buffer.clone().readString(charset) val jsonFormat = json.jsonFormat() logStr.append("$json\n${ if (jsonFormat.length > 200) "${jsonFormat.substring(0, 100)}\n\n The Json String was too long...\n\n ${ jsonFormat.substring(jsonFormat.length - 100)}\n" else "$jsonFormat\n"}" )
-
这里面还用到了 ${} 的两层嵌套。
最后
- 今天就带大家先了解这么多,后面我们接着学习 Kotlin 的 类和属性。
- 有疑问欢迎在评论区提问,欢迎关注~
网友评论