阅读 110

Kotlin基本语法

基本语法

声明变量

val 不可变,类似于const val 可变变量

逻辑控制语句

if

注意 if 可以有返回值

fun max(a:Int,b:Int): Int {
    return  if(a>b) {
        a
    } else {
        b
    }
}
复制代码

当函数只有一行代码时,可省略函数体,用等号直接串联在函数定义后,虽然max不是一行,但他和一行代码作用是一样的,可简写为:

fun max2(a:Int,b:Int)=if(a>b) a else b

when 语句

类似于switch case

fun getScore(name:String) =
    when (name) {
        "Tome"-> 80
        "Sony"-> 100
        else -> 0

}
复制代码

注意这里的箭头函数

三种用法

  1. when expressions where it separates "matching/condition" part from "result/execution" block
val greet = when(args[0]) {
   "Apple", "Orange" -> "fruit"
   is Number -> "How many?"
   else    -> "hi!"
 }
复制代码
  1. lambda expressions where it separates parameters from function body
  val lambda = { a:String -> "hi!" }
  items.filter { element -> element == "search"  }
复制代码
  1. function types where it separates parameters types from result type e.g. comparator
 fun <T> sort(comparator:(T,T) -> Int){
  }
  
复制代码

循环语句

双闭区间:

0..10 表示 [0,10] i递增

0 downTo 表示 [10,0] i递减

    for(i in 0..10){
        println("index:${i}")
    }
复制代码

单端闭区间:

0 util 10 表示 [0,10)

步长 step

  for(i in 0 until 10 step 2){
    println("index:${i}")
}
复制代码

面向对象编程

class

差异点:

  • 实例化不用new关键字

  • 默认不可继承,需声明open后才会变成继承类

  • 继承的语法为冒号 :(相当于extends)

  • 构造函数init(相当于constructor)

  • 子类调用父类构造函数,直接继承父类构造函数,直接用()括号表示(相当于super())

open class Person(val name: String,val age:Int) {
    fun eat () {
        println("the $age $name is eating")
    }
}
复制代码
class Student(name:String,age:Int,val grade: Int) : Person(name,age) {
    init {
        println("hi")
    }
}
复制代码

接口

语法 , 相当于 implement

interface Study {
    fun readBooks()
    fun doHomework()
}
复制代码
class Student(name:String,age:Int,val grade: Int) : Person(name,age) , Study {
    init {
        println("hi")
    }

    override fun readBooks() {
        println("$name read book")
    }

    override fun doHomework() {
        println("$name do homework")
    }
}
复制代码

数据类和单例类

数据类用data class 声明(个人理解为ts 里定义数据结构的interface)

data class {}

单例类

object class

object Singleton {
    fun test(){
        //
    }
}

Singleton.test()
复制代码

看起来类似于静态方法调用,实则创建了一个Singleton类的实例,并保证全局唯一

lambda 编程

前置知识

listOf() 创建一个不可变集合 mutableListOf() 可变集合

setOf() / mutableSetOf()

map

val map = HashMap<String,Int>()
map.put("apple",1)
map.put("pear",2)

复制代码

建议这种写法

map["banana"]=3
复制代码

更精简的写法

val mao = mapOf("apple" to 1, "Orange" to 2)
复制代码

lambda 表达式与匿名函数是“函数字面值”,即未声明的函数, 但立即做为表达式传递。

即一小段可以用来当作参数传递的代码

语法:

{参数名1:参数类型,参数名2:参数类型->函数体}

多数情况并不需要完整结构,一步一步推导简写形式

    val list= listOf("oppo","vivo","apple")
    val lambda = {phone:String -> phone.length}
    val res = list.maxByOrNull(lambda)
复制代码

lambda表达式作为最后一个参数时,可以将lambda提到括号外面去 如果labmda是函数唯一参数的话可以省略括号

val res = list.maxByOrNull {phone:String -> phone.length}

Kotlin具有类型推导,类型可以省略

当lambda表达式只有一个参数时,也不必声明参数名,可以用it表示

val res = list.maxByOrNull {it.length}


map/filter/any/all 基本跟js用法一致

文章分类
前端
文章标签