kotlin基本语法

函数

表达式:fun 方法名(参数名1: 数据类型, 参数名2: 数据类型): 返回值数据类型{

}

普通用法

fun test(a: Int): String {
        return "";
}

// 将表达式作为函数体,花括号可以省略
fun test1(a: Int): Int = 1;

// 函数返回无意义的值Unit,返回值可省略
fun printSum(a: Int, b: Int) {
    println("sum of $a and $b is ${a + b}")
}

条件表达式if else

// else不可省略
fun test2(a: Int, b: Int): Int {
        if (a > b) {
            return a
        } else {
            return b
        }
    }

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

fun test8(s1: String, s2: String): Int {
      val i1 = test7(s1)
      val i2 = test7(s2)

      return if (i1 != null && i2 != null) i1 * i2 else 0
}

非空条件判断(没有java的三元运算符)

 fun test4(a: String?): String {
        return a?.length.toString() ?: "0";
    }

fun test5(file: File?): String {
     return file?.absolutePath ?: "xx";
 }

 fun test6(file: File?) {
     file ?: throw IllegalArgumentException()
 }

 fun test7(s: String?): Int? = s?.toInt() ?: 0

when表达式(java的switch)

1、必须加else
2、如果对象是class类型的,则必须用 is
3、object / companion object这种类型的,则不用加 is

class A{
}

object B{
}
// else不可省略
 fun test9(s: Any): Int = when (s) {
        "1" -> 1
        "2" -> 2
        is A -> 3
        B -> 4
        else -> 0
}

let、also、with、run、apply

fun test10(file: File?) {
    var let = file.let {
        it?.absolutePath
        it?.name
    }

	val also = file.also {
	    it?.absolutePath
	    it?.name
	    999
	}
	
	with(file) {
	    this?.absolutePath
	    this@MainActivity.test5(file)
	    this?.name
	}
	
	file.run {
	    this?.absolutePath
	    this?.name
	}
	
	file.apply {
	    this?.absoluteFile
	    this?.absolutePath
	    this?.name
		}
}

fun test11(file: File?): String = file.let { it?.absolutePath } ?: ""

// a b互换值
fun test12() {
	var a = 1;
	var b = 2;
	a = b.also { b = a }
}

区别:
在这里插入图片描述

is(java的instanceOf)

fun test13(obj: Any): String? {
     return if (obj is String) obj else null
}

遍历

fun test14() {
    val list = listOf("a", "b", "c")
    for (li in list) {
        println(li)
    }

    for (index in list.indices) {
        println("$index ---${list.get(index)}")
    }

    list.forEach {

    }

    val map = mapOf("a" to "aa", "b" to "bb", 1 to "cc")
    map.forEach {
        println("${it.key} ${it.value}")
    }

    map.entries.forEach {
        println("${it.key} ${it.value}")
    }
}

in(区间)

fun test15(a: Int): Int {
        return if (a in 1..10) a else 0
}

vararg和array

1、当参数类型是array时,vararg可直接传入。
2、当参数类型是vararg时,array传入时需要在前面加上 * 号。

变量

普通变量

val 和 var

申明变量的关键字:val 和 var
区别:val表示只读,默认只有getter方法,var表示读写,默认有getter和setter方法

// ?表示可为null,kotlin里默认都不可为null
var name: String? = null
lateinit

如果不想赋值为null,可用 lateinit 关键字

lateinit var file:File

public protected private (和java一样),open

1、默认public,可省略不写
2、kotlin中的类默认是不可被扩展修改的,类似于java的final修饰,不可被继承,要想可被继承,可用open修饰符。
3、kotlin中的接口(interface)和抽象类(abstract)默认是public和open的。
4、接口和抽象类中的成员变量,在实现类或子类中必须实现

interface IDemo {
 	var text:String
    fun iTest()
}
abstract class AbsDemo {
    abstract fun absTest()
}
// 非抽象类必须用open修饰,才可被继承
open class BaseDemo  {
	// 非抽象方法必须用open修饰,才可被重写
    open fun baseTest() {

    }

    var file: File? = null
}
class Demo : IDemo, BaseDemo() {
	// 必须实现
	override var text: String = ""
        get() = field
        set(value) {
            field = value
        }

    override fun iTest() {

    }

    override fun baseTest() {
        super.baseTest()
        // 可访问父类的成员变量
        file
    }
}

5、另类创建接口实现类的方法,无需创建这个kt类,类似于内部类中的匿名内部类。

fun test() {
      val v = object : IDemo {
           override var text: String
               get() = TODO("not implemented") //To change initializer of created properties use File | Settings | File Templa
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值