美文网首页
Kotlin基本语法

Kotlin基本语法

作者: shenlong77 | 来源:发表于2018-08-31 15:50 被阅读0次

1 函数

函数定义

1 函数基本定义
fun + 函数名 +(参数名:参数类型):返回值类型

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

2 函数表达式
对于非public类型的函数表达式,可以省略返回值类型,自动推断,也可以不省略

fun sum(a:Int,b:Int) = a+b
fun sum(a:Int,b:Int):Int= a+b

对于public类型的,不能省略返回值类型

public fun sum(a:Int,b:Int):Int= a+b

3 没有返回值的函数
对于没有返回值得函数,可以把返回值类型设为Unit,相当于void,也可以省略。无论是否为public修饰的函数都可以省略。

fun show(a:Int):Unit{
    Log.i("show",a.toString());
}
fun show(a:Int){    
   Log.i("show",a.toString())
}
public fun show(a:Int){    
   Log.i("show",a.toString())
}

可变长参数函数

对于可变长的函数参数,用vararg标识

fun show(vararg v:Int){
    for(vt in v){
        Log.i("show",vt.toString())
    }
}

匿名函数

这里指的就是Kotlin中lambda表达式的使用,其实也可以建立理解为另一种函数的定义方式。

val sum = {a:Int,b:Int -> a+b}

上面是第一种写法,整体写在大括号中,左边是变量,右边是返回值

val sum1:(a:Int,b:Int) -> Int = {a,b -> a+b}

上面是第二种写法,实现功能是和第一种一样的。
首先看-> 左边,sum是函数名,(a:Int,b:Int) -> Int 是它的类型,表示输入两个int型数据,返回一个int型数据。
再看-> 右边,写在大括号里,表示传入是什么,输出结果是什么。

使用:

sum(10,10)

2 常量和变量

变量
var 变量名:类型 = 变量值

var a:Int = 1

常量
相当于final
val 常量名:类型 = 常量值

val a:Int = 1

tips
1 声明时可以不用赋值,但是使用之前必须要赋值,否则编译不过
2 声明时可以不指定类型,自动判断,但是这种情况下必须要赋值

var a = 1

var a:int
a = 1

3 字符串模板

$varName 表示变量值

${varName.fun()} 表示方法返回值:

var a = 1
var s1 = "the value is $a"

var s2 = ${s1.replace("is","was")}

s1:the value is 1
s2:the value was 1

如果想直接使用$,需要这样写${'$'}

val price = "${'$'}9.99"
println(price)  // 求值结果为 $9.99

4 NULL检查机制

因为空指针异常很容易发生,而且只能在运行时才能被发现,所有有些隐藏的错误很难被发现。
Kotlin中改进了这一点,引入了空指针异常判断,在编译时,自动检测是否有对象存在空指针异常,如果发现有空指针,会直接在编译时报错。

1 可空对象和不可空对象
在对象的类型后面加上? 表示这个对象是一个可空对象。
不加? 表示是一个不可空对象。

//可空对象
var strA:String? = null
//不可空对象
var strB:String = ""

对于不可空的对象,kotlin不会进行空指针检查,可以想一下,程序员把一个对象设成不可空对象,肯定会知道去给这个对象赋值,就不用麻烦kotlin去干了。
对于可空的对象,kotlin会进行空指针检查,因为可能在某一个可能发生空指针异常的地方忘记了做判断,这种情况还是很多的。
2 三个空指针相关的特殊符号
每次判断空指针的时候都要用if去判断,当需要判断空指针的地方很多时,就会导致代码很难看,严重降低可读性。所以kotlin中提供了三个符号来进行简化。
分别为
? ?: !!

第一个 ?
直接看代码

var str:String? = null
var len:Int?
len = str?.length

这里str是可空对象,len是可空的,?的意思就是如果str不空,返回str的长度,如果str空,返回null,
需要注意,赋值给的对象也要是可空的对象,比如这个len,不然会类型不匹配。
上面的代码作用就等价于下面这个

len = if(str==null) null else  str.length

第二个 ?:
它的作用就是如果前面的内容为空,就返回:后面的内容。
接着上面的例子来

var str:String? = null
var len:Int
len = str?.length?:-1

可以看到,现在len我设置成不可空的,但是没有报错。
因为如果str为null,str?.length也会返回null,而后面?:的作用就是如果他前面的内容,也就是str?.length的返回值,如果为null,那么就直接返回:后面的内容,也就是-1。
如果str不为null,那么将会直接返回str的长度。
所有len一定不为空,也就可以不用把它设置为可空的类型了
第三个 !!
它的意思是,让kotlin放弃对可空对象的非空检查。

var str:String? = null
var len:Int?
str = "aaa"
len = str!!.length

看上面的例子,因为已经给str赋值了,所有他不可能为空,所有加上!!,让kotlin在这句代码中,不再对str进行非空检查。
但是,需要注意,只要这样写了,无论str是否为空,kotlin都不会进行非空检查,所以这样写是很有风险的,一定要确保str不为空,才可以这样写。

5 区间

直接看代码

for(i in 1..4) print(i)    //输出1,2,3,4

for(i in 4..1) print(i)   //没有输出,也就是..只能从小到大用

for(i in 4 downTo 1) print(i)   //输出4,3,2,1,

for(i in 1..4 step 2) print(i)    //输出1,3

for(i in 4 downTo 1 step 2) print(i)   //输出4,2

for(i in 1 until 4) print(i)   //输出1,2,3

相关文章

网友评论

      本文标题:Kotlin基本语法

      本文链接:https://www.haomeiwen.com/subject/kpbswftx.html