Kotlin团队为 Android开发提供了一套超越标准语言功能的工具。
1、 Kotlin Android扩展是一个编译器扩展,比如可以不用写findViewByid,直接用Id操作控件赋值
2、Anko是一个提供围绕Android API的kotlin友好的包装器的库,以及一个可以用kotlin代码替换布局.xml文件的DSL.
一、包
说明: 源文件通常以包声明开头,源文件所有内容(无论是类还是函数)都包含在声明的包内,如果没有指明包,该文件的内容属于无名字的默认包,示例如下:
package foo.bar
fun baz(){}
class Goo{}
以上方法baz的全名是foo.bar.baz,Goo的全名是foo.bar.Goo
默认导入: 有多个包会默认导入到每个kotlin文件中,如: kotlin.、kotlin.annotation.、kotlin.collections.、kotlin.io.、kotlin.ranges.、kotlin.sequences.、kotline.text.,根据目标平台还会导入额外的包JVM: Java.lang.、kotlin.jvm.*
import导入:
1、 可以导入一个单独的名字,如.import foo.Bar // 现在 Bar 可以不用限定符访问也可以导入一个作用域下的所有内容(包、类、对象等):
import foo.* // “foo”中的一切都可访问如果出现名字冲突,可以使用as关键字在本地重命名冲突项来消歧义:import bar.Bar as bBar // bBar代表“bar.Bar”
2、关键字import并不仅限于导入类;也可用它来导入其他声明:顶层函数及属性在对象声明中声明的函数和属性;枚举常量与 Java 不同,Kotlin 没有单独的 “import static” 语法;所有这些声明都用import关键字导入。顶层声明的可见性如果顶层声明是private的,它是声明它的文件所私有的
二、定义函数
带有两个Int参数、返回Int的函数:
fun sum(a:Int,b:Int):Int
{
return a+b
}
将表达式作为函数体、返回值类型自动判断的函数:
fun sum(a:Int,b:Int)=a+b
fun main(args:Array<String>)
{
println("sum of 19 and 23 is ${sum(19,23)}")
}
函数返回无意义的值:
fun main(args:Array<String>)
{
printSum(-1,8)
}
fun printSum(a:Int,b:Int):Unit
{
println("sum of $a and $b is ${a+b}")
}
备注: Unit返回类型可以省略
三、定义局部变量
一次赋值(只读)的局部变量:
fun main(args:Array<String>)
{
var a:Int=1//立即赋值
var b=2//自动推断出"Int"类型
var c:Int//如果没有初始值类型不能省略
c=3//明确初始值
}
可变变量:
fun main(args:Array<String>)
{
var x=5 //直接推断出"Int"类型
x+=1
println("x=$x")
}
四、注释
行注释: //这是一个行注释
块注释: /*/
五、使用字符串模板
fun main(args:Array<String>)
{
var a=1
//模板中的简单名称
val s1="a is $a"
a=2
//模板中的任意表达式
val s2="${s1.replace("is","was")},but now is $a"
println(s2)
}
六、使用条件表达式
fun main(args:Array<String>)
{
println("max of 0 and 42 is $(maxof(0,42))")
}
fun maxOf(a:Int,b:Int):Int
{
if(a>b)
{
return a
}else
{
return b
}
}
使用if作为表达式:
fun maxOf(a:Int,b:Int)=if(a>b) a else b
fun main(args:Array<String>)
{
println("max of 0 and 42 is ${maxOf(0,42)}")
}
七、使用可空值及null检测
当某个变量的值额可以为null的时候,必须在声明处的类型后添加? 来标识该引用可为空
如果str的内容不是数字返回null:
fun parseInt(str:String):Int?
{
return str.toIntOrNull()
}
fun printProduct(arg1:String,arg2:String)
{
val x=parseInt(arg1)
val y=parseInt(arg2)
//直接使用"x"或"y"可能会报错,因为他们可能为null
if(x!=null&&y!=null)
{
println(x*y)
}else
{
println("either '$arg1' or '$arg2' is not a number")
}
}
fun mian(args:Array<String>)
{
printProduct("6","7")
}
或者
fun parseInt(str:String):Int ?
{
return str.toIntOrNull()
}
fun printProduct(arg1:String,arg2:String)
{
val x=parseInt(arg1)
val y=parseInt(arg2)
if (x == null) {
return
}
if (y == null) {
return }// 在空检测后,x 和 y 会自动转换为非空值
println(x * y)
}