Kotlin 基础语法详细介绍
Kotlin基础语法详细介绍
基础语法
定义包名
包名的定义应当在源文件的头部
packagemy.demo importjava.util.* //...
文件路径和包名并不要求匹配,源文件可以被放置在文件系统任意位置
参考:包
定义函数
函数有两个Int类型参数和Int类型返回值:
funsum(a:Int,b:Int):Int{ returna+b }
函数体中只有一个表达式并且作为函数的返回值:
funsum(a:Int,b:Int)=a+b
函数没有返回值:
funprintSum(a:Int,b:Int):Unit{ print(a+b) }
Unit类型的返回值类型可以省略:
funprintSum(a:Int,b:Int){ print(a+b) }
参见:函数
定义局部变量
定义只读类型的局部变量:
vala:Int=1 valb=1//`Int`类型是被编译器推理出 valc:Int//当变量的初始值没有被提供时,需要定义变量的类型 c=1//赋值
可变局部变量
varx=5//`Int`类型是被编译器推理出的 x+=1
可参见:属性与变量
注释
就像Java与JavaScripe,Kotlin也支持行注释与代码块注释。
//这是一段行注释 /*这是一段代码块 注释*/
不像Java,代码块注释在Kotlin中是可以被叠加的。
参见:Kotlin代码文档
使用字符串模板
funmain(args:Array){ if(args.size==0)return print("Firstargument:${args[0]}") }
参见:字符串模板
使用条件表达式
funmax(a:Int,b:Int):Int{ if(a>b) returna else returnb }
使用if作为一个表达式返回值:
funmax(a:Int,b:Int)=if(a>b)aelseb
参见:if表达式
使用可空变量并检测是否为空
一个引用必须明确的被设置为可为空当其可能为空值时。
返回值为null如果str没有包含数值:
funparseInt(str:String):Int?{ //... }
函数的返回值可能为空:
funmain(args:Array){ if(args.size<2){ print("Twointegersexpected") return } valx=parseInt(args[0]) valy=parseInt(args[1]) //Using`x*y`yieldserrorbecausetheymayholdnulls. if(x!=null&&y!=null){ //xandyareautomaticallycasttonon-nullableafternullcheck print(x*y) } }
或者:
//... if(x==null){ print("Wrongnumberformatin'${args[0]}'") return } if(y==null){ print("Wrongnumberformatin'${args[1]}'") return } //xandyareautomaticallycasttonon-nullableafternullcheck print(x*y)
参见:空安全
使用类型检测和类型自动转换
is操作符用于检测一个表达式是否是某一种类型,假如可变参数或者属性被检测为某一种类型,那么就不在需要明确的类型转换:
fungetStringLength(obj:Any):Int?{ if(objisString){ //`obj`isautomaticallycastto`String`inthisbranch returnobj.length } //`obj`isstilloftype`Any`outsideofthetype-checkedbranch returnnull }
或者:
fungetStringLength(obj:Any):Int?{ if(obj!isString) returnnull //`obj`isautomaticallycastto`String`inthisbranch returnobj.length }
或者:
fungetStringLength(obj:Any):Int?{ //`obj`isautomaticallycastto`String`ontheright-handsideof`&&` if(objisString&&obj.length>0) returnobj.length returnnull }
参见:类和类型转换
使用for循环
funmain(args:Array){ for(arginargs) print(arg) }
或者:
for(iinargs.indices) print(args[i])
参见:for循环
使用while循环
funmain(args:Array){ vari=0 while(i 参见:while循环
使用when表达式
funcases(obj:Any){ when(obj){ 1->print("One") "Hello"->print("Greeting") isLong->print("Long") !isString->print("Notastring") else->print("Unknown") } }参见:when表达式
使用范围表达式
检测一个数值是否在一个范围内,若在则使用in操作符
if(xin1..y-1) print("OK")检测一个数值是否不在一个范围内,若不在:
if(x!in0..array.lastIndex) print("Out")迭代一个数据范围项:
for(xin1..5) print(x)参见:范围
使用集合
迭代一个集合:
for(nameinnames) println(name)检测一个集合是否包含某个数据项,使用in操作符
if(textinnames)//names.contains(text)iscalled print("Yes")使用lambda表达式过滤或者转换一个集合:
names .filter{it.startsWith("A")} .sortedBy{it} .map{it.toUpperCase()} .forEach{print(it)}参见:高阶函数和Lambda表达式
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!