类型推导
在java中我们定义变量格式为
类型 变量 = 值,需要声明类型
例如:
String str = "hello world"
int i =2;
Kotlin
var/val 变量 = 值
val str = "hello world"
val i = 2
函数返回值视情况声明返回值类型
一般情况建议声明,使用单行表达式与等号可以省略声明
fun sum(x : Int,y : Int) = x + y
总结需要声明的情况:
1.如果变量是一个函数的参数,则必须使用
2.如果它是一个递归函数,则必须使用
3.如果他是一个非表达式函数,则除了返回Unit,其他情况必须使用
Unit:相当于Java的void,也是一种数据类型
表达式:可以返回值得语句,例如:"kotlin".length //返回值为6
变量声明
var 可以声明变量
val 为常量,为var + final
由于变量存在被修改的可能,很多副作用的产生都是与可变数据及共享状态有关,所以我们在开发过程中尽量使用val和不可变对象来减少这种情况,在定义局部变量时使用var更加适合,它占用的内存更少,如得到集合中值的和,用var很简洁,用val得用递归
函数声明
1.高阶函数
使用函数作为参数
data class Country(val name: String,val continient : String,val population : Int)
fun fileterCountries(contries : List<Country>,test : (Country)->Boolean) : List<Country>{
val res = mutableListOf<Country>()
for (c in contries){
if(test(c)){
res.add(c)
}
}
return res
}
class Book(var name : String){
fun printName(){
// Log.e(TAG,this.name)
}
fun isBigEuropeanCountry(contry : Country) : Boolean{
return contry.continient == "亚洲" && contry.population >= 1000
}
}
val countrys = listOf(Country("中国","亚洲",12121),Country("日本","亚洲",232))
fileterCountries(countrys,book::isBigEuropeanCountry)
上面的函数的参数为条件函数,其中 ::实现了类的方法进行引用
Lambda
条件:
1.一个lambda表达式必须通过{}来包裹
2.如果Lambda声明了参数部分的类型,且返回值类型支持类型推导,那么lambda变量就可以省略函数类型声明
3.如果lambda变量声明了函数类型,那么lambda的参数部分的类型就可以省略
val foo = {x : Int->
val y = x+1
}
Enum、When、For用法
Enum
enum class Day{
MON,
TUE,
WEN,
THU,
FRI,
SAT,
SUN
}
When
fun schedule(sunny : Boolean,day : Day) = when(day){
Day.SAT -> Log.e(TAG,"sat")
Day.SUN -> Log.e(TAG,"finish")
Day.FRI -> Log.e(TAG,"appointment")
else -> when{
sunny -> Log.e(TAG,"library")
else -> Log.e(TAG,"study")
}
}
for
for (i in 1..4) print(i) // 打印结果为: "1234"
for (i in 4 downTo 1) print(i) // 打印结果为: "4321"
for (i in 1..4 step 2) print(i) // 打印结果为: "13"
for (i in 4 downTo 1 step 2) print(i) // 打印结果为: "42"
for (i in 1 until 10) { // i in [1, 10), 不包含 10
println(i)
}
String
字符串拼接
fun message(name: String,lang:String) = "Hi${name},welcome to${lang}!"
val str = message("Shaw","Kotlin")
Log.e(TAG,str)//结果 : HiShaw,welcome toKotlin!
字符串 ==判断两个对象内容是否相等,===是判断两个对象引用是否相等
网友评论