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