Kotlin基础语法(笔记)
一、类型声明
变量声明示例:
val a : String = "i am a person"
小结:Kotlin中声明的类型名通常跟在变量名的后面,并且Kotlin中的所有类型都是大写。
类型推导示例:
val string = "i am kotlin"
val int = 123
val long = 123L
val float = 12.34f
val double = 12.3
val double2 = 10.1e6
小结:Kotlin中大写的才是类型,通过等号给变量赋值可以直接进行类型推导。
函数返回值类型示例
fun sum(x: Int,y: Int): Int {
return x + y} //返回类型为Int
小结:sum函数返回x + y
为Int类型,如果去掉返回值类型,函数会默认返回Unit类型,然而实际返回类型是Int,此时就会报错。
表达式函数体示例:
fun sum(x: Int,y: Int) = x + y
小结:以上的写法称为表达式函数体
,普通的函数声明称为代码块函数体
。
fun foo(n: Int) = if (n == 0) 1 else n * foo(n - 1)
//该函数会报错,说明: 在一些诸如递归的复杂情况下,即使使用表达式定义函数,也必须显式声明类型
// 正确写法 fun foo(n: Int): Int = if (n == 0) 1 else n * foo(n - 1)
总结:
- 作为函数参数时,必须显式声明类型
- 作为非表达式函数,除了函数返回Unit,其它情况必须显式声明类型
- 如果时递归函数,必须显式声明类型
二、val和var
var:代表变量
val:代表常量,即通过val定义的变量具有Java中final关键字的效果,也就是引用不可变
val 示例:
val x = intArrayOf(1,2,3)
x = intArrayOf(2,3,4) //报错,val声明,引用不可变
//虽然x引用不可变,但是它的值可以改变
x[0] = 2
小结:val声明的变量是只读变量,它的引用不可更改,但并不代表其引用对象也不可更改。
三、高阶函数和Lambda
1、函数作为参数
实例:Shaw因为旅游喜欢上了地理,作为一名程序员,他设计了一个App用来对国家数据进行操作。Shaw偏好欧洲的国家,于是它就设计了一个程序来获取欧洲的所有国家。
data class Country( //数据类,小括号括起来
val name: String,
val continiet: String,
val population: Int)
class CountryAPP {
fun filterCountries(countries: List<Country>): List<Country> {
val res = mutableListOf<Country>()
for (c in countries) {
if (c.continiet == "EU") {
//获取欧洲国家
res.add(c)
}
}
return res
}
}
后来,Shaw对非洲也产生了兴趣,于是又改进了原来的设计,支持通过集体的州来筛选国家
fun filterCountries(countries: List<Country>, continiet: String): List<Country> {
val res = mutableListOf<Country>()
for (c in countries) {
if(c.continiet == continiet) {
//通过continiet来筛选州
res.add(c)