package com.kodulf.kotlinfirsttime
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.util.Log
import kotlin.math.max
class MainActivity : AppCompatActivity() {
private val TAG:String = "kodulf"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//1: kotlin 的优点 : 代码量少了50%,更高级例如使用了Lamda表达式,几乎杜绝了空指针异常,和java 完全兼容
//2 变量的声明,var 变量名:类名 = 对应的值 或者 类名 ,相较于 java 就不需要new 的关键字了
var d:Int = 11
var varTest:VarTest = VarTest()
Log.d("test","TEST", Throwable())
//3:kotlin 的自动转换,类推导机制
var a = 10
//4:相较于java 没有基本数据类型了,转而变成了对应的类,例如int 变成了Int
var b:Int = 10
//5: val 相当于是java 中的final关键值,优先使用val 来定义数据,在需要变量的时候再改为var,这里和下面的类方法默认不让继承一个道理
val c = 10
//6: 函数的例子:
// 6.1 没有返回值,
// 6.2 有参数,(注意这里的参数的定义是服从kotlin的声明方式的,不能使用java的方式)
// 6.3 有返回值, (返回值的类型,看上去就有点像变量的的定义一样的 :Int)
// 6.4 只有一行的有返回值的函数,可以简化为等于号的赋值形式
// 6.5 因为kotlin的强有力的类推导能力,只有一行的有返回值的函数,简化为等于号的赋值形式后,还可以将返回值简化掉
Log.d(TAG,"函数的例子"+simpleFunHasOnlyOneLine3(1,2))
//7:相较于java ,取消掉了;
//8: 逻辑控制 - if
// 8.1 和java 的区别就是 if可以作为返回值给return
// 8.2 如果函数只有一句话的话,可以简化为赋值的方式
// 8.3 如果函数只有一句话的话,可以简化为赋值的方式,还可以简化掉返回值
Log.d(TAG,"if的语句调用"+ifTest(1,2))
//9: when 的语句,注意kotlin 中是没有switch的语法的,因为swtich 语法的break的语法会因为忘记导致很多问题
Log.d(TAG,"南京的温度"+whenTestGettemperature("nanjing"))
}
class VarTest {
}
// 6.1 没有返回值
fun simpleFun() {
}
// 6.2 有参数,(注意这里的参数的定义是服从kotlin的声明方式的,不能使用java的方式)
fun simpleFunHasParameter(num1:Int, num2:Int) {
}
// 6.3 有返回值, (返回值的类型,看上去就有点像变量的的定义一样的 :Int)
fun simpleFunHasReturn ():Int {
return 0
}
// 6.4 只有一行的有返回值的函数,可以简化为等于号的赋值形式
fun simpleFunHasOnlyOneLine (num1: Int,num2: Int):Int {
return max(num1,num2)
}
fun simpleFunHasOnlyOneLine2 (num1: Int,num2: Int):Int = max(num1,num2)
// 6.5 因为kotlin的强有力的类推导能力,只有一行的有返回值的函数,简化为等于号的赋值形式后,还可以将返回值简化掉
fun simpleFunHasOnlyOneLine3 (num1: Int,num2: Int) = max(num1,num2)
//8: 逻辑控制 - if
// 8.1 和java 的区别就是 if可以作为返回值给return
// 8.2 如果函数只有一句话的话,可以简化为赋值的方式
// 8.3 如果函数只有一句话的话,可以简化为赋值的方式,还可以简化掉返回值
// 8.1 和java 的区别就是 if可以作为返回值给return
fun ifTest(num1: Int,num2: Int) :Int{
return if(num1 > num2){
num1
} else {
num2
}
}
// 8.2 如果函数只有一句话的话,可以简化为赋值的方式
fun ifTest2(num1: Int,num2: Int) :Int= if(num1 > num2) num1 else num2
// 8.3 如果函数只有一句话的话,可以简化为赋值的方式,还可以简化掉返回值
fun ifTest3(num1: Int,num2: Int) = if(num1 > num2) num1 else num2
//when的语法 匹配加上 -> 形式,最后是一个else,这个有点像if ,else if,else if,else
fun whenTestGettemperature(city:String):Int{
return when(city){
"nanjing"->
35
"huaian"->
32
"beijing"->
30
else ->
15
}
}
}