1、数据类型、注意全是大写字母开头
Byte //8位
Short //16位
Int //32位
Long //64位
Float //32位
Double //64位
2、定义变量和常量(和scala一样)
//var定义变量
var a:Int = 1
var b:String = "haha"
//val定义常量
var a2:Int = 1
var b2:String = "haha"
3、定义函数(和scala一样只是def变成了fun,不加=)
fun funName(x:String,b:Int):Unit{
//todo
}
- 注意:scala中有=代表有返回值,无=代表无返回值。
而Kotlin中有=代表为=前的方法名赋值一个方法体。所以创建函数的时候不要轻易使用=,除非方法体是一句表达式。也就是说有等号就无大括号、无return可以省略返回值类型;无等号就必须有大括号、可以有return,有了return就必须有返回值类型,不能省略,省略相当于返回类型是Unit,这个和scala是不同的如:fun add(x:Int,y:Int)=x+y fun add(x:Int,y:Int):Int{return x+y}
4、函数的中缀表示法
- 他们是某类的成员函数或扩展函数
- 他们有且只有一个参数
他们用 infix 关键字标注如:
class A{ infix fun haha(content:String){....} //这是成员函数 } fun main(args:Array<String>){ //这是扩展函数 infix fun A.heihei(content:String){ //todo } val a = A() a.haha("yzy") a.heihei("yzy") a haha "yzy" a heihei "yzy" }
默认参数。
在方法(包括构造方法)的参数列表定义的时候就可以初始化赋值。调用的时候可以依次传值,也可以不传直接使用默认值。但是调用java的方法时不可以这样。如:fun haha(name:String = "yzy" ,age:Int){}
调用
haha(age = 18) //或 haha(18) //或 haha("wyq",18)
5、异常捕获(和java的写法一样)
try {
//有异常的代码部分
}catch (e:Exception){
//todo
}
6、尾递归(尾部递归)
就是再函数体的尾部进行函数的再调用,切记是尾部。然后用 tailrec关键字修饰。这才叫做尾递归。不然就还是普通的递归.如:
tailrec fun findFixPoint(x: Double = 1.0): Double
= if (x == Math.cos(x)) x else findFixPoint(Math.cos(x))
//代码的意思就是如果x=cos(x),那么函数返回值就是x,否则就将cos(x)的值传入函数继续调用执行