kotlin demo

kotlin demo

void->unit

// ,/* */

if (a > b) a else b

当某个变量的值可以为 null 的时候,必须在声明处的类型后添加 ? 来标识该引用可为空。安全调用操作符,写作 ?.如果 b 非空,就返回 b.length,否则返回 null链式调用如果任意一个属性(环节)为空,这个链式调用就会返回 null安全调用也可以出现在赋值的左侧。这样,如果调用链中的任何一个接收者为空都会跳过赋值,而右侧的表达式根本不会求值item?.let { println(it) } // 输出 Kotlin 并忽略 null。?:。请注意,因为 throw 和 return 在 Kotlin 中都是表达式,所以它们也可以用在 elvis 操作符右侧。eg:val name = node.getName() ?: throw IllegalArgumentException("name expected")

println换行打印

when (x) {

    1 -> print("x == 1")

    2 -> print("x == 2")

    else -> { // 注意这个块

        print("x is neither 1 nor 2")

    }

}

when (x) {

    in 1..10 -> print("x is in the range")

    in validNumbers -> print("x is valid")

    !in 10..20 -> print("x is outside the range")

    else -> print("none of the above")

}

fun hasPrefix(x: Any) = when(x) {

    is String -> x.startsWith("prefix")

    else -> false

}

关于Iterator主要有三个方法:hasNext()、next()、remove() hasNext:没有指针下移操作,只是判断是否存在下一个元素 next:指针下移,返回该指针所指向的元素 remove:删除当前指针所指向的元素,一般和next方法一起用,这时候的作用就是删除next方法返回的元素

eg:Iterator  iterator = keySet.iterator();
        
        while (iterator.hasNext()) {
            String  key = (String) iterator.next();
            System.out.println(key);
        }

如需在数字区间上迭代,请使用区间表达式:

for (i in 1..3) {

    println(i)

}

for (i in 6 downTo 0 step 2) {

    println(i)

}

对区间或者数组的 for 循环会被编译为并不创建迭代器的基于索引的循环。

如果你想要通过索引遍历一个数组或者一个 list,你可以这么做:

for (i in array.indices) {

    println(array[i])

}

或者你可以用库函数 withIndex

for ((index, value) in array.withIndex()) {

    println("the element at $index is $value")

}

the element at 0 is a the element at 1 is b the element at 2 is c

return@a 1意为“返回 1 到 @a”,而不是“返回一个标签标注的表达式 (@a 1)

或者,我们用一个匿名函数替代 lambda 表达式, 匿名函数内部的 return 语句将从该匿名函数自身返回

fun foo() {

    val ints = arrayOf(1, 2, 3, 4, 5, 6)

    ints.forEach(fun(value: Int) {

        if (value == 0) return

        print(value)

    })}

类型名Array<String>

表达式与语句的区别:语句是可以单独执行的、能够产生实际效果的代码;而表达式则是包含在语句中,根据某种条件计算出一个值或得出某种结果,然后由语句去判断和处理的代码。

如果不打算传入值参,可以预先给参数指定默认值。fun fix(name: String,age: Int = 2){}.如果使用命名值参,就可以不管值参的顺序。eg:fix(age=4,name=jack)

内联类:不能传递内联类的实参替代函数中基础类型的形参,不能传递基础类型的实参替代函数中内联类类型的形参

泛型类:T是类型占位符

泛型与可变参数结合:

class MagicBox<T:Human>(vararg item:  T){

private var subject:Array<out T>=item

xx

}

扩展函数:接触不到也继承不了类的情况下可以给他增加功能。具体就是在函数名前面加一个类名.就行了

泛型扩展函数:在函数名前面加一个<T>T.就行了.

扩展属性:在变量名前加一个类名.并且要给这个属性设定get()=xxx

可空类型扩展函数:fun String?.printWithDefault(default: String)=print(this ?: default)

/*SDK诠释

SDK是一系列程序接口,文档,开发工具的集合。sdk即单单不是一个开发工具,也不是一个程序。一个完整的SDK应该包括以下内容:

(1)接口文件和库文件

接口文件和库文件就是API,将底层的代码进行封装保护,提供给用户一个调用底层代码的接口;

(2)帮助文档

帮助文档解释接口文件和库文件功能,以及介绍相关的开发工具,操作示例等等;

(3)开发示例

开发示例就是做出来的一个DEMO展示,也要包括源代码;

(4)实用工具。

实用工具是用来协助用户进行二次开发的工具,比如二次开发向导、API 搜索工具、软件打包工具等。*/

infix

  • 7
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值