转向Kotlin——基础知识
Posted Android机动车
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了转向Kotlin——基础知识相关的知识,希望对你有一定的参考价值。
Kotlin基本语法
对于一种语言来说,变量和函数(方法)是最重要的两类语法。由于Kotlin语法糖的存在,让本不支持函数语法的JVM支持将函数放到代码的最顶层。本篇文章主要是介绍变量的定义和函数的基本使用方法。
1、定义变量
绝大多数编程语言都有变量和常量的概念,Kotlin和Java类似,尽管没有常量语法,但可以使用final定义一个不可修改的变量,其实就相当于常量。
在Java中是这样定义变量的:
int a=10;
final double b=1.0;
String s="Hello";
int ok;
在Kotlin中,定义变量和Java有几点不同之处:
位置不同:在Kotlin中,数据类型要放到变量之后,并用 冒号(:)分隔,这一点和Java正好相反;
变量常量关键字:在Kotlin中变量使用var开头,定义常量使用val开头;
数据类型首字母:Kotlin中,数据类型首字母全部大写;
如果定义变量时未初始化,就必须指定数据类型,如果在定义时就就初始化,可以不用声明数据类型,Kotlin编译器会更具等号右侧的值推导数据类型。
看一下示例代码:
var a=10
var b:Double=2.0
val c="hello"
var d:Int
d=a
c="hi" // 编译器报错,因为c是常量
2、定义函数
无论什么语言,函数的定义一定有以下几个部分:
函数头:包括函数名和标识函数的关键字,如fun;
参数:包括参数名和参数类型;
返回值:包括返回值类型;
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 | 8 |
Short | 8 |
Byte | 8 |
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中布尔类型用Boolean 描述,该类型有两个值: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表示字符串,有以下两种字符串:
普通字符串:类似于Java,在字符串中可以加转义字符以实现换行等要求;
保留原始格式字符串:不能使用转义字符串,格式直接在字符串中展示,要将内容放入三对双引号中。
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语句时,应该注意:
when语句会根据传入的值寻找第一个满足条件的分支,找到后执行分支语句;
如果分支中多余一条语句,要使用花括号{};
满足条件的分支执行后,会自动终止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语言,还需要下一番功夫。
以上是关于转向Kotlin——基础知识的主要内容,如果未能解决你的问题,请参考以下文章