1、变量
//---------------- 变量 -----------------//
val a: Int = 1 //不可变引用。不能在初始化之后再次赋值。对应java的final变量,只会被初始化一次
var b: Int = 0 //可变引用。这种变量的值可以被改变。相当于java的普通变量。
// a = 2//val变量如果再次赋值会报错:Val cannot be reassigned
//尽管val引用自身不可变,但是它指向的对象可能是可变的
val languages = arrayListOf("java")
languages.add("Kotlin")//引用对象发生了变化
//var 变量允许改变自己的值,但是不允许改变自己的类型
b = 2 //可以改变值
// b = "Kotlin"//不可以改变类型,会报错:Type mismatch
2、函数
//---------------- 函数 -----------------//
/**
* 代码块函数体
* 1、使用 fun 來声明一个函数
* 2、参数名:参数类型
* 3、返回类型写在参数后面,并用冒号隔开
* 4、对于有返回值的代码块体函数必须显式的写出返回类型和return语句
*/
fun sum(a: Int, b: Int): Int {
var c = a + b
return c
}
/**
* 表达式函数体
* 编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型
* 即使没有显式的写出函数返回类型,编译器也会根据函数体推导出返回类型,这种分析能力被称为类型推导
* 类型推导只用于表达式体函数,也就是说只有表达式体函数的返回类型可以忽略
*/
fun sum2(a: Int, b: Int, c: Int): Int = a + b + c
fun max(a: Int, b: Int) = if (a > b) a else b
fun appendToString(str: String, appendStr: String): String {
return str + appendStr
}
//有默认参数
fun appendToString2(str: String, appendStr: String = "isGood"): String {
return str + appendStr
}
//命名参数,可以在传递参数的时候很方便的写上参数名称
//如果已经指明了一个参数的名称,那它之后的所有参数名称都要标明
//参数没有默认值,所以必须传入
var result = appendToString(str = "Kotlin", appendStr = "isGood")
Log.i("LHD", "result = " + result)
//默认参数,函数可以给某个参数设置默认值,拥有默认值的参数可以不传
var result2 = appendToString2(str = "Kotlin")
var result3 = appendToString2("Kotlin")
Log.i("LHD", "result2 = $result2 result3 = $result3")
输出结果:
详细学习代码:
/**
* Created by LHD on 2018/8/4.
*/
class KotlinActivity : AppCompatActivity() {
//---------------- 变量 -----------------//
val a: Int = 1 //不可变引用。不能在初始化之后再次赋值。对应java的final变量,只会被初始化一次
var b: Int = 0 //可变引用。这种变量的值可以被改变。相当于java的普通变量。
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.kotlin_main)
// a = 2//val变量如果再次赋值会报错:Val cannot be reassigned
//尽管val引用自身不可变,但是它指向的对象可能是可变的
val languages = arrayListOf("java")
languages.add("Kotlin")//引用对象发生了变化
//var 变量允许改变自己的值,但是不允许改变自己的类型
b = 2 //可以改变值
// b = "Kotlin"//不可以改变类型,会报错:Type mismatch
//命名参数,可以在传递参数的时候很方便的写上参数名称
//如果已经指明了一个参数的名称,那它之后的所有参数名称都要标明
//参数没有默认值,所以必须传入
var result = appendToString(str = "Kotlin", appendStr = " isGood")
Log.i("LHD", "result = " + result)
//默认参数,函数可以给某个参数设置默认值,拥有默认值的参数可以不传
var result2 = appendToString2(str = "Kotlin")
var result3 = appendToString2("Kotlin")
Log.i("LHD", "result2 = $result2 result3 = $result3")
}
//---------------- 函数 -----------------//
/**
* 代码块函数体
* 1、使用 fun 來声明一个函数
* 2、参数名:参数类型
* 3、返回类型写在参数后面,并用冒号隔开
* 4、对于有返回值的代码块体函数必须显式的写出返回类型和return语句
*/
fun sum(a: Int, b: Int): Int {
var c = a + b
return c
}
/**
* 表达式函数体
* 编译器会分析作为函数体的表达式,并把它的类型作为函数的返回类型
* 即使没有显式的写出函数返回类型,编译器也会根据函数体推导出返回类型,这种分析能力被称为类型推导
* 类型推导只用于表达式体函数,也就是说只有表达式体函数的返回类型可以忽略
*/
fun sum2(a: Int, b: Int, c: Int): Int = a + b + c
fun max(a: Int, b: Int) = if (a > b) a else b
fun appendToString(str: String, appendStr: String): String {
return str + appendStr
}
//有默认参数
fun appendToString2(str: String, appendStr: String = " isGood"): String {
return str + appendStr
}
}