Kotlin--语法基础(上)
Posted 龙宝宝IT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin--语法基础(上)相关的知识,希望对你有一定的参考价值。
要快速预览并学习kotlin语言的语法,可以访问在线IDE。如果有浏览过前面几章的内容,那么相信大家已经安装好本地环境。
如果有过其他传统语言开发经验,你应该注意到的第一个特点就是KT语言行末无须分号,然后你还会发现KT语言是静态类型的,并且类型申明使用冒号放在变量名称之后就像这样 val a:Int。
以下部分的代码示例来自于官方文档,但作者对这些语法与其他编程语言的区别做了区分,方便大家记忆。作为KT语法最基本的组成部分,希望大家务必掌握,后面涉及更复杂的语法与原理,我们将结合我们的开发实例来讲解。
定义包
KT语言与java一样,有包的定义,不过与大家习惯不同的是KT语言的包名称不需要和源码路径对应。
包的声明应处于源文件顶部:
package my.demo
import java.util.*
定义函数
KT语言能很好的支持面向对象编程与函数式编程,但KT与java不同,KT语言中面向对象不是必须的,所以我们编写简单的应用或服务器自动化运维程序时往往只需要编写一系列函数就能轻松解决问题而无需使用类语法。
带有两个 Int 参数、返回 Int 的函数:
fun sum(a: Int, b: Int): Int {
return a + b
}
将表达式作为函数体、返回值类型自动推断的函数可以十分简洁:
fun sum(a: Int, b: Int) = a + b
返回类型可以省略:
fun printSum(a: Int, b: Int) {
println("sum of $a and $b is ${a + b}")
}
变量与可变量
在KT语言中变量被分为两种,一种是只能被赋值一次的变量,用val关键字来创建,而另一种是传统意义的变量,可以多次赋值,用var申明
一次赋值(只读)的局部变量:
fun main(args: Array<String>) {
val a: Int = 1 // 立即赋值
val b = 2 // 自动推断出 `Int` 类型
val c: Int // 如果没有初始值类型不能省略
c = 3 // 明确赋值
println("a = $a, b = $b, c = $c")
}
可变变量:
fun main(args: Array<String>) {
var x = 5 // 自动推断出 `Int` 类型
x += 1
println("x = $x")
}
注释
KT语言同php JAVA JS等语言一样支持单行注释与多行注释,不同的是KT语言的多行注释可以嵌套
/ 这是一个行注释
/* 这是一个多行的
块注释。 */
模版字符串
字符串处理是web开发最常见的工作,而模版字符串就是高级语言用来减轻开发者负担的利器,相信有过高级语言编程经验的人并不陌生。然而强大的java语言至今也没能支持,要知道php或者ruby等现代化的web开发语言环境下,一句代码搞定的事情对于java而言则需要通过创建可变字符串对象来做各种繁琐的字符串拼接操作来完成,回忆起来让人苦不堪言。
Kt语言模版字符串非常好用
var a = 1
// 模板中的简单名称:
val s1 = "a is $a"
a = 2
// 模板中的任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"
条件表达式
条件表达式是减少程序员编码工作的又一利器
传统做法是这样的:
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
日常工作中大量这样的代码都可以通过条件表达式缩减为一行:
fun maxOf(a: Int, b: Int) = if (a > b) a else b
null检测与可空值
Web开发中涉及大量由用户或其他程序模块产生的数据,因此为保障程序的健壮性,无论java还是php都随处可见各类异常处理,这种被称为防御性编程的代码混在主业务代码中将严重影响代码的可读性,而且不易维护,如果说安全检查无法避免,那么至少我们应该让它看起来更优雅。
KT语言中当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空。如以下场景:
我们编写一个函数,把一个包含数字的字符串中的数值转化为普通数值类型的时候,当传递的参数 str 的内容不是数字则返回 null:
fun parseInt(str: String): Int? {
// ……
}
使用返回可空值的函数一般用法:
fun parseInt(str: String): Int? {
return str.toIntOrNull()
}
fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2)
// 直接使用 `x * y` 可能会报错,因为他们可能为 null
if (x != null && y != null) {
// 在空检测后,x 和 y 会自动转换为非空值(non-nullable)
println(x * y)
}
else {
println("either '$arg1' or '$arg2' is not a number")
}
}
fun main(args: Array<String>) {
printProduct("6", "7")
printProduct("a", "7")
printProduct("a", "b")
}
我们还可以这样改造我们的代码:
fun parseInt(str: String): Int? {
return str.toIntOrNull()
}
fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2)
// ……
if (x == null) {
println("Wrong number format in arg1: '${arg1}'")
return
}
if (y == null) {
println("Wrong number format in arg2: '${arg2}'")
return
}
// 在空检测后,x 和 y 会自动转换为非空值
println(x * y)
}
fun main(args: Array<String>) {
printProduct("6", "7")
printProduct("a", "7")
printProduct("99", "b")
}
下周我们将继续分享Kotlin--语法基础(下),大家记得关注~
传授最新IT技术
帮你应对变化的世界
以上是关于Kotlin--语法基础(上)的主要内容,如果未能解决你的问题,请参考以下文章