编辑: ok2015 | 2017-09-18 |
5 个元素的数组,元素初始值是 i*i >
>
>
square.forEach(::println)
0 1
4 9
16 在编程过程中常用的是 boolean[]、 char[]、 byte[]、 short[]、 int[]、 long[]、 float[]、 double[];
Kotlin 直接使用了
8 个新的类型来对应这样的编程场景: BooleanArray ByteArray CharArray DoubleArray FloatArray IntArray LongArray ShortArray 3.2 可空类型或许 Java 和Android 开发者早已厌倦了空指针异常(Null Pointer Exception).因为其 在运行时总会在某个意想不到的地方忽然出现,让开发者感到措手不及. 那么为何开发者不能在编译时就提前发现这类空指针异常,并大量修复这些问题呢? 现代编程语言正是这么做的.Kotlin 自然也不例外.在Java
8 中,我们可以使用 Optional 类型来表达可空的类型. package com.easy.kotlin;
import java.util.Optional;
import static java.lang.System.out;
public class Java8OptionalDemo { public static void main(String[] args) { out.println(strLength(Optional.of( abc )));
out.println(strLength(Optional.ofNullable(null)));
} static Integer strLength(Optional s) { return s.orElse( ).length();
Kotlin 从入门到进阶实战 ・46・ //Optional 类型中的 orElse 方法,等价于 Elvis 表达式的逻辑 } } 运行程序,输出如下:
3 0 但是这样的代码依然不是那么 优雅 . 针对这方面,Groovy 提供了一种安全的属性/方法访问操作符 ?. : user?.getUsername()?.toUpperCase();
//安全调用符 ?. Swift 也有类似的语法,只作用在 Optional 的类型上. Kotlin 中使用了 Groovy 里面的安全调用符,并简化了 Optional 类型的使用,直接通过 在类型 T 后面加个 ? ,就表达了 Optional 的意义. 上面 Java
8 的例子用 Kotlin 来写就显得更加简单、 优雅 了: package com.easy.kotlin fun main(args: Array) { println(strLength(null)) println(strLength( abc )) } fun strLength(s: String?): Int { return s?.length ?:
0 //?.是安全调用符,?:是Elvis 操作符 } 其中,我们使用 String?同样表达了 Optional 的意思,相比之下,哪种方式更简单?答 案一目了然. 还有 Java
8 的Optional 提供的 orElse: s.orElse( ).length();
其在 Kotlin 中是最最常见的 Elvis 运算符了: s?.length ?:
0 相比之下,我们还有什么理由继续用 Java
8 的Optional 呢? 3.3 安全操作符 扔掉 Java 中的一堆 null 的防御式样板代码吧!当我们使用 Java 开发的时候,我们的 代码大多是防御性的.如果我们不想遇到 NullPointerException,就需要在使用........