Kotlin 变量、函数、程序的逻辑控制以及循环

2020-09-17  本文已影响0人  code希必地

1、Kotlin的原理

编程语言大致可以分为二类:

2、Kotlin的优点

3、变量

Kotlin中定义变量,只允许在变量前声明两种关键字:

fun main(){
  val a=10
}

看到这里很多人肯定会有疑问:变量的类型该怎么定义呢?

3.1、Kotlin类型推导机制

对于Kotlin来说,它是不需要显式的定义变量的类型,因为Kotlin拥有出色的类型推导机制,比如上面的例子中val a=10那么a的类型就是整型变量,如果把一个字符串赋值给a那么a就是字符串变量
如果开发者不想相信类型推导机制,也可以显式的定义变量的类型:

val a:Int=10

在上面,我们显式的指定整型变量为Int,这和java还是有区别的,在java中我们会使用关键字int,它们还是有区别的。在Kotlin中Int不再是关键字而是一个类,它拥有自己的方法和继承结构。

3.2、Java和Kotlin数据类型对照表

Java基本数据类型 Kotlin对象数据类型 数据类型说明
int Int 整型
long Long 长整型
short Short 短整型
float Float 单精度浮点型
double Double 双精度浮点型
boolean Boolean 布尔型
char Char 字符型
byte Byte 字节型

4、函数

先看下Kotlin中函数的标准定义规则:

fun function_name( param1 : Int , param2 : Int ) : Int {}
fun main(){
   val a=10
    val b=100
    val result=getLargeNumber(a,b)
    println("输出的结果是:result="+result)
}

fun getLargeNumber(num1:Int,num2:Int) : Int{
    return max(num1,num2)
}

如果方法体中只有一行代码的话:简化方法getLargeNumber

fun getLargeNumber(num1:Int,num2:Int) : Int=max(num1,num2)

由于其出色的类型推导机制,函数max的返回值为整型,继续简化如下:

fun getLargeNumber(num1:Int,num2:Int) =max(num1,num2)

5、程序的逻辑控制

程序的执行语句主要分为3种:

5.1、条件语句

Kotlin中实现条件语句的方法有两种:if和when

5.1.1 使用if实现条件语句

Kotlin中的if的用法和Java中几乎没有什么区别。

fun getLargeNumber(num1:Int,num2:Int) : Int {
    var result:Int
    if(num1>=num2){
        result=num1
    }else{
        result=num2
    }
    return result
}

Kotlin中的if相比于Java有一个额外的功能:它是可以有返回值的。返回值就是if条件语句每一个条件中最后一行代码的返回值。
上面例子可简化为

fun getLargeNumber(num1: Int, num2: Int): Int {
    return if (num1 >= num2) {
        num1
    } else {
        num2
    }
}

上面说过,方法体中只有一行代码的简化,可继续简化为一行代码

fun getLargeNumber(num1: Int, num2: Int) = if (num1 >= num2) num1 else num2

5.1.2、when条件语句

Kotlin中的when类似于Java中的switch,但是比switch强大了很多,在java中switch只能传入整形、字符串、枚举或短于整形的变量作为条件,相比来说when就比较强大了,可以传入任意类型的值。
先看一个用if实现的简单例子

fun getScore(name: String) = if (name == "Tom") {
        88
    } else if (name == "LiLi") {
        90
    } else {
        100
    }

1、精确匹配
再看下用when如何实现相同的功能

fun getScoreByWhen(name: String) =
            when (name) {
                "Tom" -> {
                    Log.e("TAG","when的每一个条件的最后一句的返回值,也可以作为返回值和if一样")
                    88
                }
                "LiLi" -> 90
                else -> 100
            }

可以看到when也是有返回值的,每一个条件的最后一句来作为返回值,和if的使用是一样的。
when允许传入一个任意类型的参数,when中结构体的标准格式是

匹配值 -> {执行逻辑}

2、类型匹配
when除了上面的精确匹配外还有类型匹配看个例子

fun checkNum(number: Number) {
        when (number) {
            is Float -> Log.e("TAG", "传入的是Float类型")
            is Double -> Log.e("TAG", "传入的是Double类型")
            is Int -> Log.e("TAG", "传入的是Int类型")
        }
    }

其中is关键字是类型匹配的核心,和Java中的instanceof的作用一样,在KotlinInt、Float、Double等数字相关的类都是其子类。
3、不带参数匹配
when除了上面的用法外,还有一种不带参数的匹配方式

fun noParamWhen(name: String) = when {
        name == "Tom" -> 88
        name == "LiLi" -> 90
        else -> 100
    }

这种写法看着有点麻烦,其实它还是有存在的意义的,下面举例说明

fun noParamWhen(name: String) = when {
        name.startsWith("Tom") -> 88
        name == "LiLi" -> 90
        else -> 100
    }

想实现上面这种功能的话就不能使用带参数的方式来实现。

6、循环语句

Java中主要有2中循环:while循环和for循环,在Kotlin中也提供了while循环和for循环,其中Kotlin中的while循环和Java中没什么区别,所以这里只需要学习下for循环的使用。
Kotlin中摒弃了Java的for-i循环,并将Java中的for-each循环修改成了for-in循环,先看下for-in循环的使用。

fun forCircle() {
        for(i in 0 .. 10){
            Log.e("TAG", "for-in循环::"+i)
        }
    }

..是定义区间的关键字,0 .. 10就表示区间为[0,10],可以看到这个区间是左闭右闭的,如何表示左闭右开呢?这就用到了until关键字

fun forCircle2(){
        for(i in 0 until 10){
            Log.e("TAG", "for-in循环,区间是左闭右开:"+i)
        }
    }

上面两个例子循环的步长都是1,那么如何修改步长呢?这就需要使用关键字step

fun forCircle3(){
        for(i in 0 .. 10 step 5){
            Log.e("TAG", "for-in循环,步长为5:"+i)
        }
    }

上面的例子都是升序的,如何实现降序呢?使用关键字downTo即可实现

fun forCircle4(){
        for(i in 10 downTo 0 ){
            Log.e("TAG", "for-in循环,降序:"+i)
        }
    }
上一篇 下一篇

猜你喜欢

热点阅读