Android开发Android技术知识Android开发

与Kotlin有关的31天-第一周

2018-05-19  本文已影响0人  塞上牧羊空许约

如果你使用Kotlin写的越多,你就会越喜欢它(我怕是已经中毒啦)。Kotlin的第一周,我们就打下基础吧。

第一天:Elvis 操作符

想优雅地处理null?不妨看一下?:这个操作符呗。它只是一个可以将空值替换为一个默认值甚至是return 语句的语法糖!文档:Elvis operator

val name: String = person.name ?: “unknown”
val age = person.age ?: return

第二天:字符串模板

想格式化字符串?在字符串字面量中将$置于变量名的前面可以引用到变量和表达式。计算表达式时使用${expression}.文档:string templates

val language = “Kotlin”
// “Kotlin has 6 characters”
val text = “$language has ${language.length} characters”

第三天: 解构声明

玩一下棱镜?(歪果仁是很皮)Android KTX 使用解构来给颜色的三原色赋值。你可以在类中使用析构,或者继承一个现有类后添加解构(这个特性真的很赞啊)。文档:destructuring declarations

// now with prisms
val (red, green, blue) = color
// destructuring for squares
val (left, top, right, bottom) = rect
// or more pointedly
val (x, y) = point

第四天:when 表达式

一个具有超能力的switch语句?Kotlin的when表达式可以匹配 任何东西。字面量,枚举,数字区间等等。你甚至可以调用任何函数!文档:when

class Train(val cargo: Number?) {
    override fun toString(): String {
        return when (cargo) {
            null, 0 -> "empty"
            1 -> "tiny"
            in 2..10 -> "small"
            is Int -> "big inty"
            else -> "$cargo"
        }
    }
}

第五天:For循环,区间表达式和解构

For循环和kotlin的另外两个特性-区间表达式和解构一起使用时将获得超能力。文档:rangesdestructuring

// iterating in the range 1 to 100
for(i in 1..100) {…}
// iterating backwards, in the range 100 to 1
for(i in 100 downTo 1){…}
// iterating over an array, getting every other element
val array = arrayOf(“a”, “b”, “x”)
for(i in 1 until array.size step 2 ){…}
// iterating over an array with the item index and destructuring
for((index, element) in array.withIndex()) {…}
// iterating over a map
val map = mapOf(1 to “one”, 2 to “two”)
for( (key, value) in map){…}

第六天:属性
kotin中,类可以有可变和只读的属性,getters和setters默认会生成。如果有需要你也可以实现自定义的属性。文档:

class User {
    // properties
    val id: String = “” // immutable. just getter
    var name: String = “” // default getter and setter
    var surname: String = “” // custom getter, default setter
    get() = surname.toUpperCase() // custom getter declaration
    var email: String = “” // default getter, custom setter
    set(value) { // custom setter declaration
    // “value” = name of the setter parameter
    // “field” = property’s backing field; generated
        if(isEmailValid(value)) field = value
    }
}

第七天: 数据类和相等性
创建一个只扮演一种角色的类: 仅用于装载
数据?将类标注为“data”类即可,equals()方法的默认实现会自动生成,hasCode(),toString(),和copy()方法当然也是如此啦,而且会检验结构相等性。文档:data classes,equality

data class User(
    val name: String, 
    val email: String, 
    val address: Address, 
    … 
)
public class UserListDiffCallback: DiffUtil.Callback() {
    override fun areContentsTheSame(
         oldItemPosition: Int,  
         newItemPosition: Int
    ): Boolean { 
    // use the generated equals method
    return newUserList[newItemPosition] == 
           oldUserList[oldItemPosition])
}

本周注重基础:消除空值错误,简化循环和条件表达式,优化getters和setters,并去消除样板代码。下周我们将探索Kotlin更多的特性。


翻译自:#31DaysOfKotlin — Week 1 Recap

上一篇 下一篇

猜你喜欢

热点阅读