Kotlin学习

Kotlin入门

  • 定义函数
  • 定义局部变量
  • 使用类型转换和自动类型转换
  • 使用when表达式
  • 惯用法

定义函数

//a ,b为Int值,返回值也会Int类型
fun sum(a:Int,b:Int):Int{
    return a+b
}

//函数表达式作为函数体,返回类型,自行判断
fun sum(a:String,b: Int) = a+b

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

定义变量

// val 一次性赋值(只读)的局部变量
val a:Int = 1
val c = 1 //变量自动判断类型
val b : Int //没有初始化语句,必须明确指定类型
b = 1 // 明确赋值

// var 值可变的变量
var x = 5
x+=1

使用条件表达式

fun max(a: Int, b: Int){
    if(a>b){
        print(a)
    }else{
        print(b)
    }

//以表达式的形式使用
fun max(a:Int, b: Int) = if(a>b) a else b

使用类型检查和自动类型类型转换

fun getStringLength(obj: Any):Int?{
    if(obj is String){
        //在这个分支中,'obj'的类型会被自动转换为String
        return obj.length
    }else{
        //在分之外,'obj'的类型依然为Any
        return null
    }
}

使用for循环

fun loop(arr: Array<String>) {
    //第一种
    for(a in arr){
        print(a)
    }

    //第二种
    for(i in arr.indices){
        print(arr[i])
    }
}

使用while循环

fun loop(arr: Array<String>) {
    var i = 0
    while (i<arr.size){
        print(i++)
    }
}

使用when表达式

fun cases(obj: Any) {
    when (obj) {
        1 -> print("1")
        is String -> print("String")
        is Long -> print("Long")
        !is String -> print("Not String")
        else -> print("Unknown")
    }
}

使用范围值

//使用in运算符检查一个数值是否在范围中
if(x in 1..y-1){
    print("OK")
}
//检查是否在某个范围之外
if(x !in 0..arr.size){
    print("Out")
}
//进行迭代
for(x in 1..5){
    print(x)
}

使用集合

//在集合中进行迭代
for(name in names){
    println(name)
}

//使用in运算符检查一个集合中是否包含某个对象
if(text in names){
    print("Yes") // 将会调用name.contains(text)的方法
}

//使用lambda表达式,对集合中的元素进行过滤和变换
names
    .filter{it.startsWith("A")} //过滤出以"A"开头的元素
    .sortedBy{it} //排序
    .map{it.toUpperCase()} // 全部变成大写
    .forEach{print(it)} // 循环输出

惯用法

创建 DTO 类(或者叫 POJO/POCO 类)

data class Customer(val name: String, val email: String)

以上代码将创建一个 Customer 类, 其中包含以下功能:
所有属性的 getter 函数(对于 var 型属性还有 setter 函数)
equals() 函数
hashCode() 函数
toString() 函数
copy() 函数
所有属性的 component1() , component2() , … 函数

对函数参数指定默认值

//可以通过传入参数改变默认值
fun foo(a: Int = 0, b: String = "") { ... }

过滤list中元素

var list = arrayListOf<Int>()
    list.add(1)
    list.add(2)
    list.add(3)
    //过滤list中的元素
    var positives = list.filter { x-> x>2 }
    //更简便的写法
    var positives = list.filter { it > 2 }
    positives.forEach{ print(it)}

字符串中加入变量值

//$加上变量名
println("Name $name")

类型实例检查

when (x) {
    is Foo -> ...
    is Bar -> ...
    else -> ...
}

使用成对变量来遍历 Map, 这种语法也可以用来遍历 Pair 组成的 List

//定义只读集合,不能添加
val map = mapOf("a" to 1, "b" to 2, "c" to 3)
for ((k, v) in map) {
    println("$k -> $v")
}
//访问Map
println(map["key"])
map["key"] = value

延迟属性

val p: String by lazy {
    // 计算该字符串
}

拓展函数

//类名加方法名
fun String.spaceToCamelCase() { ... }

//如果类中已经有此方法,拓展名和方法名相同时候
class Person{
    fun walk(){
        print("fly")
    }
}
fun Person.fly(){
    print("walk")
}
//当调用此方法时,调用的是成员函数而不是拓展函数
 Person().fly()

If not null 缩写

val files = File("Test").listFiles()
println(files?.size)

//If not null and else 缩写
val files = File("Test").listFiles()
println(files?.size ?: "empty")

//当值为 null 时, 执行某个语句
val data = ...
val email = data["email"] ?: throw IllegalStateException("Email is missing!")

//当值不为 null 时, 执行某个语句
val data = ...
data?.let {
    print("不为空") // 这个代码段将在 data 不为 null 时执行
}

在函数的 return 语句中使用 when 语句

fun transform(color: String): Int {
    return when (color) {
    "Red" -> 0
    "Green" -> 1
    "Blue" -> 2
    else -> throw IllegalArgumentException("Invalid color param value")
    }
}

将 ‘if’ 用作一个表达式

fun foo(param: Int) {
    val result = if (param == 1) {
    "one"
    } else if (param == 2) {
    "two"
    } else {
    "three"
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值