> 文章列表 > Kotlin基础教程

Kotlin基础教程

Kotlin基础教程

文章目录

    • 简介与安装
    • 变量和算术
    • 函数
    • 条件表达式
    • 循环语句
    • when表达式

简介与安装

Kotlin自从17年开始就成了谷歌认证的安卓官方开发语言。Kotlin虽然也是运行在Java虚拟机中的语言,不过也可以编译成javascript,从而在没有JDK的情况下运行。

若只是想略作体验,那么可以尝试以下官网提供的在线编译器。此外,Android Studio中提供了Kotlin的编译环境,可以直接新建安卓项目,这个过程完全符合直觉,而且官网对每一个步骤都给出了截图,就不再赘述了。新建项目之后,Kotlin代码放在java目录下,后缀为.kt的就是。

当然,相对来说命令行交互式操作更加适合初学者,所以只需要下载Kotlin编译器,这里给出的是1.3.5版本。下载之后解压到喜欢的文件夹,然后将bin目录添加到环境变量。

输入命令kotlin进入命令行交互环境;通过kotlin -h可以查看编译器的操作方法。

>kotlin
Welcome to Kotlin version 1.8.20-RC2 (JRE 11.0.16.1+1-LTS)
Type :help for help, :quit for quit //帮助和退出命令,别忘了冒号
>>> println("hello kotlin")
println("hello kotlin")hello kotlin
>>> :quit       //退出

变量和算术

和许多函数式语言一样,Kotlin将数据分成了变量和常量两种,分别用关键字varval表示,其中val声明的变量不可更改。

其数据类型包括Byte、Short、Int、Long等整数类型;Float、Double等浮点类型;字符类型Char;布尔类型Boolean;字符串String。数值类型之间可用转换函数互相转换,转换函数包括toBytetoShort等,其余类同,不再赘述。

>>> var One = 1		//这是变量
>>> val Two = 2		//这是常量
>>> One = 3
>>> Two = 3
error: val cannot be reassigned
Two = 3             //val声明的变量不可更改
>>> One.toByte()
One.toByte()res4: kotlin.Byte = 3
>>> One.toChar()
One.toChar()res5: kotlin.Char = 
>>> One		//toChar只会改变返回值的数据类型
res6: kotlin.Int = 3

在Kotlin中,数值运算、比较运算以及布尔运算都符合程序员的直觉,但定义了新的位运算函数,包括

shl(bits) shr(bits) ushr(bits) and(bits) or(bits) xor(bits) inv()
有符号左移 有符号右移 无符号右移 位与 位或 位异或 位非

下面略作演示,考虑到>>>不利于复制粘贴,所以后续的示例代码均省略>>>,而对其返回结果写在注释里,Kotlin单行注释为//,多行注释用//

3 shl 3     //3 向左移三位,相当于乘以8
// 返回结果 kotlin.Int = 24

函数

对于只需要一行表达式的函数,Kotlin提供了非常简单的定义方法,例如

fun f(x:Int) = x*x
f(5)    //f(5)res2: kotlin.Int = 25

这种写法简直和数学公式一样,非常直观,但其实是一种简化写法。完整的函数声明需要标明输入输出的数据类型,返回值的类型也需要声明,所以,若想实现上面的 f ( x ) = x 2 f(x)=x^2 f(x)=x2的功能,需要写为

fun f(x:Int):Int{return x*x
}

kotlin中,可以通过参数名进行传参,且支持默认参数。函数如果没有返回值,则其返回类型为Unit

// 输入为两个整型,输出为一个整型
fun add(x:Int,y:Int):Int{return x+y}
add(y=3,x=4)
//结果: kotlin.Int = 7
fun add(x:Int=1,y:Int=2):Int{return x+y}//函数可以有默认参数
add()
//结果: kotlin.Int = 3
fun test(x:Char):Unit{println(x)}		//无返回值的类型为Unit
test('y')
//将打印y

kotlin支持lambda表达式,通过->表示输入输出的变化关系,例如

{a:Int, b:Int -> a+b}(3,4)
//返回 kotlin.Int = 7

条件表达式

Kotlin中,条件语句用if(){}else{}表示,下面新建一个函数,里面通过条件表达式来判断输入参数的大小

fun compare(x:Int, y:Int):Int{if(x>y){println("x>y")return 1}else if(x<y){println("x<y")return -1}else{println("x==y")return 0}
}

然后测试一下

compare(1,2)
// 打印x<y
// 返回kotlin.Int = -1

Kotlin中,任何表达式都有返回值,if...else亦然,其默认返回值为最后一行语句。也就是说,将上述函数改写为下面的形式,结果是完全相同的

fun compare(x:Int, y:Int):Int{return if(x>y){println("x>y")1}else if(x<y){println("x<y")-1}else{println("x==y")0}
}

此外,这种特性也提供了天然的三元表达式if() a else b,从而可以非常方便地写一个递归的阶乘函数

fun fac(n:Int):Int{return if(n>1) n*fac(n-1) else 1}
fac(15)
//返回 kotlin.Int = 2004310016

循环语句

kotlin中有for循环和while循环两种。while循环的逻辑是,在某个循环条件成立的情况下,一直执行循环体的内容

var i = 0
while(i<10){println(i)i++
}

运行结果会打印出09的10个数字。

for循环则需要遍历一个可迭代的数据结构,例如

for(i in 1..10){println(i)
}

其中1..10将生成从110的自然序列,经由for循环后,即对这10个数一次操作。

when表达式

kotlin中的when表达式类似于C语言中的switch...case,示例如下

fun num2card(x:Int):String{return when(x){13      ->"K"12      ->"Q"11      ->"J"1       ->"A"else    ->"$x"}
}

其中"$x"可将作为数值的x转化为字符串,下面测试一下

num2card(12)
//返回: kotlin.String = Q
num2card(3)
//返回: kotlin.String = 3

when表达式非常灵活,对于when(flag){xxx -> yyy}而言,只要flag xxx能够构成一个可供判断的表达式,就可以执行。例如

  • when(flag){is String -> println("string")},表示flagString时执行
  • when(flag){in 1..5 -> println("1..5")},表示flag1,2,3,4,5中任意一个时执行

此外,对于多个个例,可用逗号分隔

  • when(flag){1,2 -> println("1,2")},表示flag1,2中任意一个时执行