Day 1:可见性express
在 Kotlin 中一切都是默认 public 的。而且 Kotlin 还有一套丰富的可见性修饰符,例如:private, protected, internal。它们每一个都以不一样的方式下降了可见性。编程
须要处理代码中的空值?可使用 elvis 操做符,避免您的 “空状况” (null-erplate)。这只是替换空做为值或者返回事件状况的一个小语法。安全
格式化字符串?将$放在变量名的前面去表达字符串中的变量和表达式。使用 ${expression} 求表达式的值。app
强大的 switch!Kotlin 的 When 表达几乎能够匹配任何东西。字面值,枚举,数字范围。您甚至能够调用任意函数!编程语言
for 循环在与其余两种 Kotlin 特性一块儿使用时能够得到超级能力:范围表达式和解构。函数
在 Kotlin 中,类能够具备可变和只读属性,默认状况下生成 getter 和 setter。若是须要,您也能够实现自定义的。post
Android KTX 使用解构来分配颜色的组件值。您能够在您的类中使用解构,或者扩展示有的类来添加解构。学习
本周以基本知识为主:处理空错误,简化循环和条件,属性,解构架。下一周咱们将会深刻探索 Kotlin 的更多功能。测试
Day 8:简单的 bundleui
准备去经过简洁的方式去建立 bundle,不调用 putString,putInt,或它们的 20 个方法中的任何一个。一个调用让您生成一个新的 bundle,它甚至能够处理 Arrays。
喜欢 Parcelable 的速度,但不喜欢写全部的代码?和 @Parcelize 打个招呼。
能够建立具备一个具备处理数据的类吗?将它们标记为 "Data" 类。并默认实现生成 equals() 方法 - 至关于 hashCode(),toString() 和copy(),并检查结构是否相等。
Lambda 很是贴心,使用最后一个参数调用语法您能够取消回调,Callable 和 Runnable,例如 Android KTX 贴心的用一个小包装来处理 postDelayed。
方法参数的数量是否太多?在函数中指定默认参数值。使用命名参数使代码更具可读性。
在同一个项目中使用 Kotlin 和 Java?您有没有顶级功能或属性的课程?默认状况下,编译器将生成类名称 YourFileKt。经过使用 @file:JvmName 注释文件来更改它。
迭代器用在了有趣的地方!Android KTX 将迭代器添加到 viewGroup 和 sparseArray。要定义迭代器扩展请使用 operator 关键字。 Foreach 循环将使用扩展名!
这周咱们更深刻学了 Kotlin 的特性:简洁 bundle,迭代,Data,postDelay,默认参数,序列化。下一周咱们会了解更多的 Kotlin 特性而且开始探索 Android KTX。
Day 15:sealed 类
Kotlin 的 sealed 类可让您轻松的处理错误数据,当结合 LiveData 您能够用一个 LiveData 同时表明成功和失败的路径,这比用两个不变量要好。
懒加载是个好东西!经过使用懒加载,能够省去昂贵的属性初始化的成本直到它们真正须要。计算值而后保存并为了将来的任什么时候候的调用。
Android 中,在 onCreate 或者其它的回调初始化对象,但在 Kotlin 中不为空的对象必须初始化。那么怎么办呢?能够输入 lateinit。来承诺最终将会初始化。
您方法的参数是有效的吗?用 require 在使用前能够检查它们,若是它们是无效的将会抛出 IllegalArgumentException。
您的封闭类的状态是否正确?可使用 check 来验证。若是检查的值为 false,它将抛出 IllegalStateException。
等不及要使用 lambdas 来生成一个新的接口?kotlin 可使您制定一个 inline 的方法 -- 这意味着调用将替换方法体,用很很是简单的方法来生成 lambda 的接口。
用操做符重载快更快速写 Kotlin。像 Path,Range或 SpannableStrings 这样的对象容许像加法或减法这样的操做。经过 Kotlin,您能够实现本身的操做符。
类的实用方法?将它们添加到源文件的顶层。在 Java 中,它们被编译为该类的静态方法。
本周主要讨论一些基本的 Kotlin 特性,如运算符重载,内联,运算符重载,懒加载,以及很是强大的 inLine,并展现了使用 Android KTX 处理内容值,捆绑包和回调时如何编写更简洁的代码。
Day 22:简单的内容值
将 ContentValues 的强大功能与 Kotlin 的简洁性相结合。使用 Android KTX 只传递一个 Pair <StringKey,Value> 建立 ContentValues。
特定于域的语言能够经过使用类型安全的构建器来完成。它们为简化 API 作出贡献;您也能够本身借助扩展 lambdas 和类型安全构建器等功能构建它们。
具体化的概念例子:Android KTX 中的 Context.systemService() 使用泛化来经过泛型传递 “真实” 类型。没有经过 getSystemService。
Android KTX:Context.systemService()
经过 by 用您的工做委托给另外一个类。经过类继承,并将属性访问器逻辑与委托者属性重用。
没有更多的 Util 类。经过使用扩展功能扩展类的功能。把您要扩展的类的名字放在您添加的方法的名字前面。
扩展功能的一些特性:
不是成员函数
不要以任何方式修改原始类
经过静态类型信息解决编译时间
会被编译为静态函数
不要多态性
例如:String.toUri()
若是您曾经将 Drawable 转换为 Bitmap,那么您知道须要多少样?Android KTX 具备一系列功能,可使您的代码在使用图形包中的类时更加简洁。
序列是从未存在的列表。序列是迭代器的表亲,一次只能懒散地产生一个值。这在使用 map 和 fifter 时很是重要 - 它们将建立序列,而不是为每一步都复制列表!
功能强大但很难使用 - 这就是 Spans API 感受的文本样式。 Android KTX 为一些最多见的 span 添加了扩展功能,并使 API 更易于使用。Android KTX: 可跨越字符串的构建器
经过默认参数扩展示有的 API 一般会让每一个人都高兴。 Android KTX 容许您使用默认参数在视图的一侧设置填充。一行代码能够节省不少代码!Android KTX: View.updatePadding
让咱们运行一些标准的 Kotlin 函数!简短而强大,run,let,with 和 appy 都有一个接收器 (this),可能有一个参数 (it) 并可能有一个返回值。差别以下:
run
本周咱们涵盖了更多语言特性,如 interop,refied 和 sequence,而且在 Android KTX,展现了它帮助您编写简洁易读的代码的一些方法。咱们也讨论了高级特性:领域特定语言 (DSL)。