kotlin学习笔记

目录

  • kotlin学习笔记
    • 包声明和导入
    • 变量的定义和使用
    • 函数的定义
    • NULL检查机制
      • 定义可为空的变量
      • 对于NULL的处理方式
    • 字符串模板
    • 区间
    • 流程控制
      • 选择
      • 循环
    • 冒号的使用
    • 类的使用
    • 待补充

kotlin学习笔记

最近kotlin已经成为android开发的首选语言,这里做一个学习kotlin的笔记

包声明和导入

  • package
    说明当前的文件在哪个包内
  • import
    引入其他的包或者函数

变量的定义和使用

//var定义可变变量
var <标识符> : <类型> = <初始化值>
var x = 5        // 系统自动推断变量类型为Int

//val定义的变量只能赋值一次,类似于java的final
val <标识符> : <类型> = <初始化值>

变量在引用前必须先赋值(初始化)

函数的定义

//经典定义
fun sum(a: Int, b: Int): Int {   // Int 参数,冒号后面的Int代表返回值 Int
    return a + b
}

//以表达式作为返回结果,可以省略返回类型(不建议省略)
fun sum(a: Int, b: Int) = a + b

//无返回值(void)可以省略
public fun printSum(a: Int, b: Int) { 
    print(a + b)
}

NULL检查机制

这是kotlin相比与java的一个优点

定义可为空的变量

//类型后面加?表示可为空
var age: String? = "23" 

对于NULL的处理方式

//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1

字符串模板

符号 含义
$ 表示一个变量名或者变量值
$varName 表示变量值
${varName.fun()} 表示变量的方法返回值
/*****定义一个类******/
class User {
    var name: String? = null
    var age: String? = null
}

/********应用********/
val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age
var userInfo = "name:${user.name},  age:$age"
//输出结果:name:tutu, age:23

区间

用1…4来表示从1到4

流程控制

选择

if和else和java一样用就行了,下面介绍功能强大的when

  • when
// 测试值 x = 0, -1, 1, 2, 3, 6, 10
var x = 10
when (x) {
    //常量
    2 -> println("等于2")
    //数值表达式
    if (x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1")
    //Boolean类型表达式
    in 1..5 -> println("范围匹配1-5")
    !in 6..9 -> println("不是6-9")
    is Int -> println("类型判断")
    else -> println("else")
}
// 代替if...else if
when{
    x > 6 && x <= 10  ->  println("大于6小于等于10")
    x < 6 -> println("小于6")
    else -> println("else")
}

循环

while 和 do…while 同Java并无区别,for则有很大改变并多出了几个变种

  • for
val list = arrayListOf("aa", "bb", "cc")
//递增for (int i = 0; i < list.size(); i++)
for (i in list.indices) {
   print(list[i])
}
//递增for (int i = 2; i < list.size(); i++)
for (i in 2..list.size-1) {
   print(list[i])
}
//递减for (int i = list.size() - 1; i >= 0; i--)
for (i in list.size - 1 downTo 0) {
    print(list[i])
}
//操作列表内的对象
for (item in list) {
    print(item)
}
//加强版
for((i, item) in list.witnIndex(){
    print(list[i])
    print(item)
}
//变种版
list.forEach {
    print(it)
}

list.forEach {
    print(it)
}

list.forEachIndexed { i, s ->
    print(list[i])
    print(s)
}

list.forEachIndexed(object :(Int,String) -> Unit{
    override fun invoke(i: Int, s: String) {
        print(list[i])
        print(s)
    }
})

冒号的使用

//val表示常量var表示变量声明
val name: String = "tutu" 
//省略类型说明
var age = "23"
//fun表示函数
fun getName(): String{
   return "tutu"
}
//类继承
class UserList<E>(): ArrayList<E>() {
    //...
}
//引用java的类
val intent = Intent(this, MainActivity::class.java)//类名::class.java

类的使用

待补充

  • 可变长参数函数
  • lambda(匿名函数)
  • 菜鸟

你可能感兴趣的:(android)