//这就是一个Int了
var a = 1
//这就是一个String了
var b = "string"
//如果你想要给他们赋值,还是要注意类型的
a = b //这可是会报错的
val a: Int = 1
if(a is User)
{
a = b.getUser()
}
data class User(val name: String, val age: Int)
fun main(args: Array<String>)
{
println(2.pow2()) //4.0
}
fun Int.pow2() = Math.pow(this.toDouble(), 2.0)
fun main(args: Array<String>)
{
val point = Point(2.3,4.5)
println(-point) //Point(x=-2.3, y=-4.5)
}
data class Point(var x: Double, var y: Double)
{
operator fun unaryMinus() = Point(-x, -y)
}
val a = "你好"
val point = Point(2.3,4.5)
println("$a,我的坐标是x=${point.x},y=${point.y}")
//你好,我的坐标是x=2.3,y=4.5
Java:
if (a>b){
max=a;
}else{
max=b;
}
Kotlin:
val max = if(a > b) a else b
这样写也是可以的
val max = if (a > b) {
println("a=$a")
a
} else {
println("b=$b")
b //默认最后一行是返回值
}
Java:
switch(a)
{
case 1:
System.out.println(a);
break;
case 2:
System.out.println(a);
break;
case 3:
System.out.println(a);
break;
default:
System.out.println(a);
}
Kotlin:
when(a)
{
1->println(a)
1,2->println(a)
//还可以这样
in 3..33->println(a)
!in 200..500->println(a)
//甚至可以这样
Math.max(7,9)->println(a)
//只要你能想到的,都可以试试,无论是函数还是字符串、Any什么的
else->println(a)
}
还可以不要判断条件,这样默认判断boolean
when
{
x>10->println(1)
x<10->println(2)
else->print(10)
}
//其中view就是it
btn.setOnClickListener {
val text = it.getText().toString()
log.i(this, text)
}
//如果看不惯,可以改成这个样
btn.setOnClickListener {view ->
val text = view.getText().toString()
log.i(this, text)
}
val array = arrayListOf<String>("a","b","c")
array.forEach ( ::println )
data class hello(var name: String?)
val len = a!!.length
val a = b as String
Java:
int len = null;
if(a != null)
len = a.length();
Kotlin:
var len =a?.length()
//只要有一个为null就返回null
d = a?.b?.c?.length()
Java:
int len;
if(a != null)
len = a.length();
else
len = 0;
Kotlin:
val len = a?.length ?: 0
val list1 = listOf(1..34, 4..7)
val list2 = listOf(2,4,6,23,87)
//这个之前也提到过,很多语言都已经有了,可以把集合遍历
//可以结合lambda表达式,对元素进行操作
list2.forEach { print("$it ") }
list1.forEach {it.forEach { print("$it ") }}
//forEach并没有返回值,所以这样的操作其实是无效的
list2.forEach{it*2}
//map(遍历,返回list)
val newList = (1..30).map { it * 2 + 3 }
newList.forEach(::println)
//flatMap(将多重集合平铺,返回list)
val newList2 = list1.flatMap { it }
newList2.forEach(::println)
//reduce(遍历并对每一项进行操作,并将值赋给acc进行累计,函数返回值为acc)
val newList3 = list2.reduce { acc, i -> i+acc }
println(newList3)
//fold(有初始值的reduce,还可以进行字符串操作等)
println(list2.fold(5){acc, i -> i+acc })
println(list2.fold(StringBuffer()){acc, i -> acc.append("$i,") })
//filter(lambda表达式返回为false时过滤)
println(list2.filter { it%2==1 })
//takeWhile(lambda表达式返回false时结束)
println(list2.takeWhile { it%2==0 })
//let(默认当前对象为it,返回值为最后一行)
println(list2.let {
it.toString()
it[1]
})
//apply(在函数内可以直接调用该对象的方法,返回该对象)
println(list2.apply{
toString()
get(1)
})
//run(在函数内可以直接调用该对象的方法,返回最后一行)
println(list2.run {
toString()
get(1)
})
//use(将自动把对象进行close,try,catch等操作)
BufferedReader(FileReader("hello.txt")).use {
var line : String?
while(true)
{
line = it.readLine() ?: break
println(line)
}
}
//简化(readText()直接读取文件)
println(BufferedReader(FileReader("hello.txt")).use { it.readText() })