您的位置:首页 > 其它

一、Kotlin基础语法

2018-04-04 16:42 232 查看
Kotlin基础语法

Kotlin文件以 .kt 为后缀

默认导入:
* Kotlin.*
*Kotlin.annotation.*
*Kotlin.collection.*
*...

函数定义
函数定义用关键字 fun ,参数格式为 : 参数:类型
fun sum(a:Int , b:Int ):Int {
//Int类型的参数,Int类型的返回值
return a + b;
}
表达式作为函数体:返回类型自动推断
fun sum(a:Int,b:Int) = a+ b
//public方法必须明确写出返回类型
public fun sum(a:Int,b:Int):Int = a+b

无返回值的函数
fun printfSum(a:Int , b:Int):Unit {
println(a+b)
}
fun printfSum(a:Int , b:Int):Unit {
println(a+b)
}
//如果返回的是Unit类型,则可以省略
public fun printSum(a:Int,b:Int) {
print(a+b)
}

可变长参数
函数的变长参数可以用vararg关键字进行标识
fun main(args: Array<String>) {
vars(1,2,3,4,5)
}

fun vars(vararg v:Int){
for(vt in v){
print(vt)
}
}

Lambda(匿名函数)
Lambda表达式使用实例:
val sumLambda:(Int,Int) -> Int = {x,y -> x+y}
println(sumLambda(1,2))

定义常量与变量
可变变量定义:var 关键字
Var <标识符> : <类型> = <初始化值>
不可变变量定义:val关键字,只能赋值一次的变量(类似java中final修饰的变量)
Val <标识符> : <类型> = <初始化值>

常量与变量都可以没有初始化值,但是在引用前必须初始化编译器支持自动类型判断,即声明时可以不指定类型,由编译器判断
val a:Int = 1
val b =1  //系统自动推断变量类型为Int
val c: Int //如果不在声明时初始化则必须提供变量类型
c = 1 //明确赋值

var x= 5
x+=1  //变量可修改

注释
//	var x= 5
/*
var x= 5
x+=1
*/<
4000
/span>
与java不同,Kotlin中的块注释允许嵌套

字符串版本
$表示一个变量名或者变量值
$varName 表示变量值
${varName.fun}表示变量的方法返回值:
var a= 1
//模板中的简单名称
val s1 = "a is $a"

a = 2
//模板中的任意表达式
val s2 = "${s1.replace("is","was")},but now is $a"

NULL检查机制
Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后面加!!像java一样抛出异常,另外一种字段后面加?可不做处理返回值为null或配合?:做空判断处理
//类型后面加?表示可为空
var age:String ?= null
//抛出空指针异常
val ages = age !! .toInt()
//不做处理返回null
val ages1 = age ?.toInt()
//age为空返回-1
val ages2 = age ?.toInt()?:-1
当一个引用可能为null值时,对应的类型声明必须明确地标记为可为null
当str中的字符串内容不是一个整数时,返回null;

类型检测及自动类型转换
我们可以使用is运算符检测一个表达式是否是某类型的一个实例(类似于java中instanceof关键字)
fun getStringLength(obj:Any):Int?{
if(obj is String){
//做过类型判断以后,obj会被系统自动类型转换为String类型
return obj.length
}

//在这里还有一种方法,于java中instanceof不同,使用!is
//	if(obj !is String){
//		//XXX
//	}

//这里的obj仍然是any类型的引用
return null
}
或者
fun getStringLength(obj:Any):Int?{
if(obj !is String)
return null
//在这个分支中,‘obj’的类型会被自动转换为‘String’
return obj.length
}
甚至还可以
fun getStringLength(obj:Any):Int?{
//在‘&&’运算符的右侧,'obj'的类型会被自动转换为‘String’
if(obj is String && obj.length >0)
return obj.length
return null
}

区间
区间表达式由具有操作符形式..的rangeTo函数辅以in和!In形成
区间是为任何可比较类型定义的,但对于整体原生类型,它有一个优化的实现,以下是使用区间的一些示例:
for(i in 1..4) print(i) //输出‘1234’
for(i in 4..1) print(i) //什么都不输出
for(i in 1..10){
//等同于1<= i && i<=10
println(i)
}

//使用step指定步长
for(i in 1..4 step 2) print(i) //输出‘13’

for(i in 4 downTo 1 step 2) print(i) //输出‘42’

//使用until函数排除结束元素
for(i in 1 until 10 ){
//i in [1,10)排除了10
println(i)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: