zoukankan      html  css  js  c++  java
  • kotlin 语言入门指南(二)--代码风格

    语言风格

    这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request 。

    创建DTOs(POJSs/POCOs) 文件

    data class Customer(val name: String, val email: String)

    上述代码提供了一个包含以下功能的 Customer 类:

    • getters (and setters in case of vars) for all properties
    • equals()
    • hashCode()
    • toString()
    • copy()
    • component1()component2(), …, 等等 (请查看 Data classes)

     函数参数默认值:

    fun foo(a: Int = 0, b: String = "") { ... }

    过滤一个 List

    val positives = list.filter { x -> x > 0 }

    还可以更简洁:

    val positives = list.filter { it > 0 }

    $ 操作符给字符串中插入变量 :

    println("Name $name")

    类型实例检查:

    1 when (x) {
    2     is Foo -> ...
    3     is Bar -> ...
    4     else   -> ...
    5 }

    Map/List 的名值对遍历:

    1 for ((k, v) in map) {
    2     println("$k -> $v")
    3 }

    k, v 的命名可以是任何字符

    使用 Ranges(区间):

    1 for (i in 1..100) { ... }  // 闭区间: 包含 100
    2 for (i in 1 until 100) { ... } // 半开区间: 不包含 100
    3 for (x in 2..10 step 2) { ... }  // x自增2
    4 for (x in 10 downTo 1) { ... }  // 倒序遍历
    5 if (x in 1..10) { ... }   // x是否在区间

    只读List

    val list = listOf("a", "b", "c")

    只读Map

    1 val map = mapOf("a" to 1, "b" to 2, "c" to 3)

    访问Map

    1 println(map["key"])
    2 map["key"] = value

     lazy属性:

    1 val p: String by lazy {
    2     // compute the string
    3 }

    函数扩展:

    1 fun String.spaceToCamelCase() { ... }
    2 
    3 "Convert this to camelcase".spaceToCamelCase()

     创建单例:

    1 object Resource {
    2     val name = "Name"
    3 }

    if 判空(null)的快捷方式:

    1 val files = File("Test").listFiles()
    2 
    3 println(files?.size)

    有else:

    1 val files = File("Test").listFiles()
    2 
    3 println(files?.size ?: "empty")

    如果为空则执行语句

    1 val data = ...
    2 val email = data["email"] ?: throw IllegalStateException("Email is missing!")

    为空则执行操作:

    1 val data = ...
    2 
    3 data?.let {
    4     ... // execute this block if not null
    5 }

    when语句里返回:

    1 fun transform(color: String): Int {
    2     return when (color) {
    3         "Red" -> 0
    4         "Green" -> 1
    5         "Blue" -> 2
    6         else -> throw IllegalArgumentException("Invalid color param value")
    7     }
    8 }

     try/catch:

    1 fun test() {
    2     val result = try {
    3         count()
    4     } catch (e: ArithmeticException) {
    5         throw IllegalStateException(e)
    6     }
    7 
    8     // Working with result
    9 }

    IF:

    1 fun foo(param: Int) {
    2     val result = if (param == 1) {
    3         "one"
    4     } else if (param == 2) {
    5         "two"
    6     } else {
    7         "three"
    8     }
    9 }

     生成器模式写法返回 Unit

    1 fun arrayOfMinusOnes(size: Int): IntArray {
    2     return IntArray(size).apply { fill(-1) }
    3 }

    单行表达式:

    fun theAnswer() = 42

    相当于:

    1 fun theAnswer(): Int {
    2     return 42
    3 }

    可以高效地与其他语法配合,是代码更简洁,如下面的 when

    1 fun transform(color: String): Int = when (color) {
    2     "Red" -> 0
    3     "Green" -> 1
    4     "Blue" -> 2
    5     else -> throw IllegalArgumentException("Invalid color param value")
    6 }

     使用 With 语句可以调用一个对象里的多个方法:

     1 class Turtle {
     2     fun penDown()
     3     fun penUp()
     4     fun turn(degrees: Double)
     5     fun forward(pixels: Double)
     6 }
     7 
     8 val myTurtle = Turtle()
     9 with(myTurtle) { //draw a 100 pix square
    10     penDown()
    11     for(i in 1..4) {
    12         forward(100.0)
    13         turn(90.0)
    14     }
    15     penUp()
    16 }

    支持Java 7 的文件操作方式:

    1 val stream = Files.newInputStream(Paths.get("/some/file.txt"))
    2 stream.buffered().reader().use { reader ->
    3     println(reader.readText())
    4 }

    为声明需要泛型信息的泛型方法提供更为方便的格式:

    1 //  public final class Gson {
    2 //     ...
    3 //     public <T> T fromJson(JsonElement json, Class<T> classOfT) throws JsonSyntaxException {
    4 //     ...
    5 
    6 inline fun <reified T: Any> Gson.fromJson(json): T = this.fromJson(json, T::class.java)

     Boolean 值可以是null:

    1 val b: Boolean? = ...
    2 if (b == true) {
    3     ...
    4 } else {
    5     // `b` is false or null
    6 }

     转载请注明原文地址:http://www.cnblogs.com/joejs/p/6878128.html

  • 相关阅读:
    博客园特效页脚保存
    go channel
    goland 注册
    mac安装go环境
    go 结构体与方法
    gin教程
    hihocoder234周 计算不包含黑点的矩形个数
    参考文献的正确姿势
    vscode用法
    使用extract-text-webpack-plugin提取css文件
  • 原文地址:https://www.cnblogs.com/joejs/p/6878128.html
Copyright © 2011-2022 走看看