Kotlin简介
如何运行Kotlin代码
三种运行方法
- 使用IntelliJ IDEA。
这是JetBrains的旗舰IDE开发工具,对Kotlin支持得非常好。在IntelliJ IDEA里直接创建-一个Kotlin项目,就可以独立运行Kotlin 代码了。缺点是还要再下载安装-一个IDE工具,有点麻烦,因此这里我们就不使用这种方法了。 - 第二种方法是在线运行Kotlin代码。
为了方便开发者快速体验Kotlin编程, JetBrains 专门提供了一个可以在线运行Kotlin 代码的网站,地址是: htps://try.kotlinlang.org。缺点国内网路慢,也不使用。 - 第三种方法是使用Android Studio。
遗憾的是, Android Studio作为一个专门用 于开发Android
应用程序的工具,只能创建Android项目,不能创建Kotlin项目。但是没有关系,我们可以随便
打开一个Android项目,在里面编写一个Kotlin 的main()函数,就可以独立运行Kotlin代码了。
在AS中运行kotlin文件
创建kotlin文件
HelloWorld—app—scr—main—java—comexample.helloworld右键New—Kotlin File/Class—输入选择下图
编写main函数
shift+F10
编程之本:变量与函数
变量
- val(value)
用来声明一个不可变的变量,在初始值赋值后就再也不能重新赋值,对应java中的final变量。
- var(variable)
用来声明一个可变的变量,在初始赋值之后仍然可以再被重新赋值,对应Java中的非final变量。
Kotlin拥有出色的类型推导机制
但是Kotlin的类型推导机制并不总是可以正常工作的,比如说如果我们对一个变量延迟赋值的话,Kotin就无法自动推导它的类型了。这时候就需要显式地声明变量类型才行,Kotlin
提供了对这一功能的支持,语法如下所示:
val a: Int = 10
可以看到,我们显式地声明了变量a为Int类型,此时Kotlin 就不会再尝试进行类型推导了。如果现在你尝试将一个字符串赋值给a,那么编译器就会抛出类型不匹配的异常。
Java中int,Kotlin中Int*
Kotlin 完全抛弃了Java中的基本数据类型,全部使用了对象数据类型。
在Java中int是关键字
在Kotlin中Int是一个类,它拥有自己的方法和继承结构
例题,a*10![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/3c350fedc7483b0f8f3cb6323ba76d62.png)
使用val和var的时机
永远优先使用val来声明一个变量,当val没有办法满足你的需求时再使用var。这样设计出来
的程序会更加健壮,也更加符合高质量的编码规范。
函数
函数是用来运行代码的载体
是程序的入口函数,程序一旦运行,就是从main()函数开始执行的。
函数语法规则:
fun methodName (paraml: Int, pa ram2:Int): Int{
return 0
}
fun(function)定义函数的关键字,无论定义什么函数都要fun来声明。
fun(关键字) 函数名(参数名:参数类型, 参数名:参数类型):函数返回类型{
函数体
return 0
}
不想接受任何参数,不需要返回任何数据就写一对空括号就可以。
返回类型如不需要可以不写。
- 定义了一个名叫largerNumber()的函数,作用是接收两个整形参数,总是返回两个参数中最大的那个数。(largerNumber()只是对max()做了一个封装)*
fun largerNumber(numl: Int, num2: Int): Int {
return max (numl, num2)
}
import kotlin.math.max
AS拥有非常智能的代码提示和补全功能。
- 尝试调用该函数时间简单的功能。
fun main() {
val a = 37
val b = 40
val value = largerNumber(a, b)
println("larger number is " + value)
}
fun largerNumber(num1: Int, num2: Int): Int {
return max(num1, num2)
}
运行过程
- 定义a,b两个变量。a=37,b=40,然后调用largerNumber()函数,并将a、b作为参数传入。
- largerNumber()函数会返回最大的那个数,然后打印出来。
Kotlin语法糖 *
当函数中只有一行代码时Kotlin允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义的尾部,中间等号连接。
例如上题就可以简化成
fun largerNumber(num1: Int, num2: Int): Int = max(num1, num2)
这种语法节省了return关键字,等号足以表达返回值的意思。
由于max()函数返回的是一个Int值,而在largerNumber()函数的尾部又使用等号连接了max()函数,因此Kotlin可以推导出largerNumber()函数返回的必然也是一个Int值,也不用再显式地声明返回值类型了。如下
fun largerNumber(num1: Int, num2: Int) = max(num1, num2)
语法糖可以结合Kotlin的其他语言特性一起使用,对简化代码方面帮助很大。
程序的逻辑控制
程序的执行语句主要分为三种
- 顺序语句
- 条件语句
- 循环语句
1.if条件语句
- 不借助Kotlin中max()函数实现,用if
fun largerNumber (numl: Int, num2: Int): Int {
var value = 0
if (numl > num2) {
value = numl
} else {
value = num2
}
return value
}
kotlin中的if有一个额外的功能,它是可以有返回值的,返回值就是if语句每一个条件中最后一行代码的返回值。
- 用返回值简写
`fun largerNumber (numl: Int, num2: Int): Int {
val value = if (numl > num2) {
numl
} else {
num2
}
return value
}
fun largerNumber (numl: Int, num2: Int): Int {
return if (numl > num2) {
numl
} else {
num2
}
}
- 语法糖精简代码
fun largerNumber (numl: Int, num2: Int) = if (numl > num2) numl else num2
2.when条件语句
有点类似于java中的switch,但远比switch语句强大的多。
- 编写一个查询考试成绩的功能,输入一个学生的姓名,返回该学生考试的分数。(if)
fun getScore(name:String) = if (name == 'Tom'){
86
}else if(name == 'Jim'){
77
}else if(name == 'Jack'){
95
}else if(name == 'Lily'){
100
}else {
0
}
运行过程
- 定义一个getScore()函数,这个函数接受一个学生姓名参数,然后通过if判断找到该学生的分数并返回。(使用了很常用的kotlin语法糖)
- when
fun getScore(name:String) = when(name){
"Tom" -> 86
"Jim" ->77
"Jack" ->95
"Lily" ->100
else -> 0
}
函数体直接=,用了语法糖
when格式:
匹配值 -> { 执行逻辑 }
当你的执行逻辑只有一行代码时,{}可以省略。
除精确匹配之外,when语句还允许类型匹配。
fun checkNumber(num:Number){
when (num){
is Int -> println("number is Int")
is Double -> println("number is Double")
else -> println("number not support")
}
}
is——类型匹配的核心
由于checkNumber()函数接受一个Number类型的参数(kotlin内置的一个抽象类),像Int、Long、Float、Double等与数字相关的类都是它的子类。
- 尝试在main()函数中调用checkNumber()函数
fun main(){
val num = 10