转向Kotlin——基础知识

Kotlin基本语法

对于一种语言来说,变量和函数(方法)是最重要的两类语法。由于Kotlin语法糖的存在,让本不支持函数语法的JVM支持将函数放到代码的最顶层。本篇文章主要是介绍变量的定义和函数的基本使用方法。

1、定义变量

绝大多数编程语言都有变量和常量的概念,Kotlin和Java类似,尽管没有常量语法,但可以使用final定义一个不可修改的变量,其实就相当于常量。

在Java中是这样定义变量的:

int a=10;
final double b=1.0;
String s="Hello";
int ok;

在Kotlin中,定义变量和Java有几点不同之处:

  1. 位置不同:在Kotlin中,数据类型要放到变量之后,并用 冒号(:)分隔,这一点和Java正好相反;
  2. 变量常量关键字:在Kotlin中变量使用var开头,定义常量使用val开头;
  3. 数据类型首字母:Kotlin中,数据类型首字母全部大写
  4. 如果定义变量时未初始化,就必须指定数据类型,如果在定义时就就初始化,可以不用声明数据类型,Kotlin编译器会更具等号右侧的值推导数据类型。

看一下示例代码:

var a=10
var b:Double=2.0
val c="hello"
var d:Int

d=a

c="hi" // 编译器报错,因为c是常量

2、定义函数

无论什么语言,函数的定义一定有以下几个部分:

  1. 函数头:包括函数名和标识函数的关键字,如fun;
  2. 参数:包括参数名和参数类型;
  3. 返回值:包括返回值类型;

Kotlin代码:

fun add(a: Int, b: Int): Int {
    return a + b
}

可以看到,定义Kotlin函数时,函数头除了包含函数名外,还需要有fun关键字。至于参数,与定义Kotlin变量的方式相同。如果函数有返回值,那么返回值类型在函数定义部分末尾指定,与函数定义部分用冒号(:)分隔。如果函数没有返回值,则可以返回Unit,或者什么都不反回,如:

fun add(a: Int, b: Int) {
    a + b
}

3、注释

Kotlin中的注释与Java中的注释一样,也有单行注释和块注释。

// 表示大那行注释
/* */ 表示块注释

Kotlin块注释还支持嵌套:

/*
hello /* world */
*/

基础数据类型

在Kotlin中,一切都是对象。任何变量都有相应的方法和属性。为了提高效率,Kotlin对部分数据类型进行了优化,变成了内置的数据类型。不过这些类型的变量用起来就像普通的类,也有自己的方法和属性。

常用的数据类型有数值、字符、布尔值和数组。

1、数值类型

Kotlin提供的内置数据类型:

数据类型 字节数
Double 8
Float 4
Long 8
Int 4
Short 2
Byte 1

Kotlin代码:

var a: Int = 10
var b: Double = 2.0
val c: Boolean = true
var d: Short = 0

Kotlin和Java一样,也有默认类型,整数默认类型是Int,浮点数默认类型是Double。

不过在Java中占字节数少的变量转为占字节数多的变量时,会自动进行转换。而Kotlin不可以,Kotlin提供了一系列的方法用来进行类型转换:

  • toByte()
  • toShort()
  • toInt()
  • toLong()
  • toFloat()
  • toDouble()
  • toChart()

Kotlin和Java一样,也提供了一些特殊的表示法,用于表示Double和Float类型的值,以及十六进制和二进制

  • 表示Long类型值,在数值后面加L或l,如100L
  • 表示Float类型的值,在数值后面加F或f,如12.3F
  • 表示十六进制,在数值前面加0x,如0x1F
  • 表示二进制没在数值前面加0b

Kotlin还提供数值分隔符,使用下划线(_)分隔,可以根据具体情况进行分隔,举个例子,1000000表示一百万,为了方便读取,可以写成1_000_000。

2、字符类型

Kotlin语言中,字符类型用Char表示,不过和Java不同的是,Kotlin中不能将字符直接看作是数字。

与Java一样,字符用单引号,Kotlin也支持反斜杠转义符,如常见的\n,\t,\b 等等。

虽然字符不能直接作为数值使用,但是可以使用toInt()方法将字符转成相应的ASCII码值。

3、布尔类型

Kotlin中布尔类型用Booleann描述,该类型有两个值:true和false。Boolean类型有3中操作:逻辑或(||),逻辑与(&&)和逻辑非(!)。

看以下代码示例:

var flag1 : Boolean =true
val flag2:Boolean= false
if(flag1 && flag2){
    println("true")
}
if(flag1 || flag2){
    println("false")
}

4、数组

在Kotlin中,用Array描述数组,该类中包含了get和set方法,size属性及其他成员方法。

在Kotlin中定义数组的方法有很多,使用arrayOf()函数定义可以存储任意值的数组;使用arrayOfNulls函数定义指定长度的空数组(数组元素中没有值);使用Array类的构造器指定数组长度和初始化数据的方式定义数组;使用intArrayOf、shortArrayOf等函数定义指定类型的数组,并初始化。请看示例:

val arr1= arrayOf(1,2,3)
println(arr1[2])

arr1[2]=10
println(arr1[2])

var arr2= arrayOfNulls<Double>(10)
println(arr2.size)

var arr3= intArrayOf(1,2,3,4,5)
println(arr3[0])

5、字符串

Kotlin中使用String表示字符串,有以下两种字符串:

  1. 普通字符串:类似于Java,在字符串中可以加转义字符以实现换行等要求;
  2. 保留原始格式字符串:不能使用转义字符串,格式直接在字符串中展示,要将内容放入三对双引号中。
val s1="Hello\n"
val s2="World"

val s3="""Hello  
          World"""

6、字符串模板

Kotlin中海油一个很重要的功能,就是字符串模板。所谓字符串模板,就是在字符串中添加若干占位符,内容在后期指定,也就是说,用模板可以设置字符串动态的部分。

模板使用美元符号 i = i”,其中 i 后面的i是变量,还可以用${表达式}来作占位符。

val s1="Hello $arr1[0]"
val s2="World ${a+b}"

Kotlin中也有包的概念,包在表达方式上与Java完全一样,不过Kotlin中的包和目录没有关系,Kotlin的包仅仅是为了引用文件中的资源而设计的,先看段代码:

package com.example.kotlin

fun adtion() {}

class MyClass {}

上面代码中,定义了一个函数和一个类,实际上,完整的函数名和类名分别是com.example.kotlin.adtion和com.example.kotlin.MyClass。

那么在其他的Kotlin文件中,若想使用adtion方法或者MyClass类,直接调用com.example.kotlin.adtion和com.example.kotlin.MyClass。

当然,为了方便,也可以类似Java一样,使用import先导入该文件

import com.example.kotlin.adtion
import com.example.kotlin.MyClass

或者

import com.example.kotlin.*

Kotlin还支持给导入的资源起一个别名:

import com.example.kotlin.adtion as a
import com.example.kotlin.MyClass as m

控制流

Kotlin的控制流与Java基本相同,只是使用了when替代了switch。当然,在Kotlin中,if和when不仅可以作为语句使用,还可以当作表达式使用。

1、条件语句

Kotlin中,if语句本身就是表达式,有返回值,因此Kotlin中不会有如Java那样的三木运算符。下面是条件语句的基本使用:

if(a<b){
    println(a)
}else{
    println(b)
}

如果将if语句当作表达式来使用的话,满足条件的最后一条执行语句就是返回值

var min=if(a<b){
            println(a)
            a
    }else{
            println(b)
            b
     }

2、when语句

Kotlin中,使用when替换了switch语句,标准使用如下:

when (a) {
    1 -> {
        println(1)
    }
    2 -> {
        println(2)
    }
    else -> {
        println("else")
    }
}

使用when语句时,应该注意:

  1. when语句会根据传入的值寻找第一个满足条件的分支,找到后执行分支语句;
  2. 如果分支中多余一条语句,要使用花括号{};
  3. 满足条件的分支执行后,会自动终止when语句执行,因此,并不用像switch语句中那样每一个case语句都加一个break。

当然,when语句也可以作为表达式来使用,第一个满足条件的最后一条语句作为when语句的返回值:

var m=when (a) {
    1 -> {
        println(1)
    }
    2 -> {
        println(2)
    }
    else -> {
        println("else")
    }
}

如果多个分支执行的代码都一样,可以在一个分支用逗号(,)分隔多个条件,如:

when (a) {
    1, 3, 5 -> {
        println(1)
    }
    2, 4, 6 -> {
        println(2)
    }
    else -> {
        println("else")
    }
}

when中的分支条件不仅可以是常量,还可以是表达式,如:

when (a) {
    in 1..5 -> {
        println(1)
    }
    in 6..8 -> {
        println(2)
    }
    else -> {
        println("else")
    }
}

3、for循环

在Kotlin中,for循环可以直接枚举集合中的元素,也可以按集合索引来枚举元素。

for(item in collection) println(item)
var arr= arrayOf(2,4,6,8)
for(item: Int in arr){
    println(item)
}
for(i in arr.indices){
    print(arr[i])
}

4、while循环

Kotlin中的while和Java中的while循环是一样的,也分while和do..while,代码如下:

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

在循环中,使用continue和break,continue是结束此次循环,执行下次循环,break是跳出循环,执行循环之后的步骤,这点和Java一样。

小结

尽管Kotlin和Java是无缝衔接的,但在语法上还是有许多不同的,最重要的是编码习惯和观念的改变,因此若想充分掌握Kotlin语言,还需要下一番功夫。

后续内容,请关注我的微信公众号——Android机动车

猜你喜欢

转载自blog.csdn.net/jiashuai94/article/details/79770796