31 天,从浅到深轻松学习 Kotlin

这篇文章介绍开发者用 31 天学习 Kotlin 的心得,深入浅出地介绍了 Kotlin 的一些基本特性以及高级用法,对处于不同阶段的 Kotlin 开发者来说,在提高开发效率和了解 Kotlin 提供一些参考,希望可以对大家有所帮助。

第一周

Day 1:可见性

在 Kotlin 中一切都是默认 public 的。并且 Kotlin 还有一套丰富的可见性修饰符,例如:private, protected, internal。它们每个都以不同的方式降低了可见性.

Day 2:Elvis 操作符

需要处理代码中的空值?可以使用 elvis 操作符,避免您的 “空情况” (null-erplate)。这只是替换空作为值或者返回事件情况的一个小语法。

Day 3:String 模板

格式化字符串?将 $ 放在变量名的前面去表达字符串中的变量和表达式。使用 $ {expression} 求表达式的值。

Day 4:When 表达式

强大的 switch!Kotlin 的 When 表达几乎可以匹配任何东西。字面值,枚举,数字范围。您甚至可以调用任意函数!

Day 5:循环,范围表达式与解构

for 循环在与其他两种 Kotlin 特性一起使用时可以获得超级能力:范围表达式和解构。

Day 6:属性

在 Kotlin 中,类可以具有可变和只读属性,默认情况下生成 getter 和 setter。如果需要,您也可以实现自定义的。

Day 7:解构声明

Android KTX 使用解构来分配颜色的组件值。您可以在您的类中使用解构,或者扩展现有的类来添加解构。

第一周学习小结:

本周以基本知识为主:处理空错误,简化循环和条件,属性,解构架。下一周我们将会深入探索 Kotlin 的更多功能。

第二周

Day 8:简单的 bundle

准备去通过简洁的方式去创建 bundle,不调用 putString,putInt,或它们的 20 个方法中的任何一个。一个调用让您生成一个新的 bundle,它甚至可以处理 Arrays。

Day 9:Parcelize

喜欢 Parcelable 的速度,但不喜欢写所有的代码?和 @Parcelize 打个招呼。

Day 10:Data 类和 equality

可以创建具有一个具有处理数据的类吗?将它们标记为 "Data" 类。并默认实现生成 equals() 方法 - 相当于 hashCode(),toString() 和copy(),并检查结构是否相等。

Day 11:简化 postDelay

Lambda 非常贴心,使用最后一个参数调用语法您可以取消回调,Callable 和 Runnable,例如Android KTX 贴心的用一个小包装来处理 postDelayed。

Day 12:默认参数

方法参数的数量是否太多?在函数中指定默认参数值。使用命名参数使代码更具可读性。

Day 13:从 Java 编程语言调用 Kotlin

在同一个项目中使用 Kotlin 和 Java?您有没有顶级功能或属性的课程?默认情况下,编译器将生成类名称 YourFileKt。通过使用 @file:JvmName 注释文件来更改它。

Day 14:在没有迭代器的情况下迭代类型

迭代器用在了有趣的地方!Android KTX 将迭代器添加到 viewGroup 和 sparseArray。要定义迭代器扩展请使用 operator 关键字。 Foreach 循环将使用扩展名!

第二周学习小结:

这周我们更深入学了 Kotlin 的特性:简洁 bundle,迭代,Data,postDelay,默认参数,序列化。下一周我们会了解更多的 Kotlin 特性并且开始探索 Android KTX。

第三周

Day 15:sealed 类

Kotlin 的 sealed 类可以让您轻松的处理错误数据,当结合 LiveData 您可以用一个 LiveData 同时代表成功和失败的路径,这比用两个不变量要好。

您也可以将 sealed 类用在 RecyclerView 的 adapter 中,非常适合于 ViewHolders —— 用一组干净的类型明确地分派给每个持有者。用作表达式时,如果有类型不匹配,编译器将会出错。

使用 RecyclerViews,如果我们有很多来自 RecyclerView 中 item 的回调,比如一个点击,分享和删除 item 的项目,我们可以使用 sealed 类。一个回调可以处理所有的事情!

Day 16:懒加载

懒加载是个好东西!通过使用懒加载,可以省去昂贵的属性初始化的成本直到它们真正需要。计算值然后保存并为了未来的任何时候的调用。

Day 17Lateinit

Android 中,在 onCreate 或者其它的回调初始化对象,但在 Kotlin 中不为空的对象必须初始化。那么怎么办呢?可以输入 lateinit。来承诺最终将会初始化。

Day 18:要求 (require) 和检查 (check)

您方法的参数是有效的吗?用 require 在使用前可以检查它们,如果它们是无效的将会抛出IllegalArgumentException。

您的封闭类的状态是否正确?可以使用 check 来验证。如果检查的值为 false,它将抛出 IllegalStateException。

Day 19:内联 (InLine)

等不及要使用 lambdas 来生成一个新的接口?kotlin 可以使您制定一个 inline 的方法 -- 这意味着调用将替换方法体,用很非常简单的方法来生成 lambda 的接口。

Day 20:运算符重载

用操作符重载快更快速写 Kotlin。像 Path,Range或 SpannableStrings 这样的对象允许像加法或减法这样的操作。通过 Kotlin,您可以实现自己的操作符。

Day 21:顶级方法和参数

类的实用方法?将它们添加到源文件的顶层。在 Java 中,它们被编译为该类的静态方法。

您是否为您的类定义了静态常量?使它们成为顶级属性。它们将被编译为字段和静态访问器。

第三周学习小结:

本周主要讨论一些基本的 Kotlin 特性,如运算符重载,内联,运算符重载,懒加载,以及非常强大的 inLine,并展示了使用 Android KTX 处理内容值,捆绑包和回调时如何编写更简洁的代码。

第四周

Day 22:简单的内容值

将 ContentValues 的强大功能与 Kotlin 的简洁性相结合。使用 Android KTX 只传递一个 Pair 创建 ContentValues。 

Day 23:DSLs

特定于域的语言可以通过使用类型安全的构建器来完成。它们为简化 API 做出贡献;您也可以自己借助扩展 lambdas 和类型安全构建器等功能构建它们。

Spek 是一个构建为 Kotlin DSL 的测试库。 Spek 不使用 @Annotations,而是提供了一种不依赖于反射的类型安全的方式来声明测试代码。

Android 上 Kotlin 的另一个 DSL 是 Anko。Anko 允许您使用声明性代码构建 Android 视图。

Day 24:具体化

具体化的概念例子:Android KTX 中的 Context.systemService() 使用泛化来通过泛型传递 “真实” 类型。没有通过 getSystemService。

Android KTX:Context.systemService()

Day 25:Delegates

通过 by 用您的工作委托给另一个类。通过类继承,并将属性访问器逻辑与委托者属性重用。

Day 26:延期方法

没有更多的 Util 类。通过使用扩展功能扩展类的功能。把您要扩展的类的名字放在您添加的方法的名字前面。

扩展功能的一些特性:

不是成员函数

不要以任何方式修改原始类

通过静态类型信息解决编译时间

会被编译为静态函数

不要多态性

例如:String.toUri()

Day 27:Drawable.toBitmap() 轻松转换

如果您曾经将 Drawable 转换为 Bitmap,那么您知道需要多少样?Android KTX 具有一系列功能,可以使您的代码在使用图形包中的类时更加简洁。

Day 28:Sequences, lazy 和 generators

序列是从未存在的列表。序列是迭代器的表亲,一次只能懒散地产生一个值。这在使用 map 和 fifter 时非常重要 - 它们将创建序列,而不是为每一步都复制列表!

您可以从列表中创建序列或指定下一个功能。如果您永远不会终止一个序列,它可以是无限长的而不会耗尽内存。使用 Kotlin 中的协程您也可以使用生成器!

Day 29:更简单的 Spans

功能强大但很难使用 - 这就是 Spans API 感觉的文本样式。 Android KTX 为一些最常见的 span 添加了扩展功能,并使 API 更易于使用。Android KTX: 可跨越字符串的构建器.

Day 30:updatePadding 扩展

通过默认参数扩展现有的 API 通常会让每个人都高兴。 Android KTX 允许您使用默认参数在视图的一侧设置填充。一行代码可以节省很多代码!Android KTX: View.updatePadding

Day 31:范围外 run,let,with,apply

让我们运行一些标准的 Kotlin 函数!简短而强大,run,let,with 和 appy 都有一个接收器 (this),可能有一个参数 (it) 并可能有一个返回值。差异如下:

run

let

with

apply

第四周学习小结:

本周我们涵盖了更多语言特性,如 interop,refied 和 sequence,并且在 Android KTX,展示了它帮助您编写简洁易读的代码的一些方法。我们也讨论了高级特性:领域特定语言 (DSL)。

以上就是这期的主要内容。如果您有其他的 Kotlin 相关问题,欢迎您在文章下方给我们留言。

点击此处 您可查看更多AndroidGoogle Play相关内容信息


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,432评论 25 707
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,594评论 18 139
  • 《商道》 研究规律,应用规律; (1),才能;“才能” 就是能解决问题的能力。协调周围人办事的能力;找到这些规律,...
    笑曰阅读 235评论 0 0
  • 至到多年以后的今天,我才仿佛明白夜晚的门对我来说意味着什么? 暑假放假回到农村老家,老家有个习惯,夏天...
    安妮小同学阅读 683评论 3 1
  • 深夜回到家,看到小区门口的老大爷已经裹上了厚厚的棉衣,换上了冬季的果品,守着自己的那个小推车,大约是冷,老大爷不停...
    狐言乱语_阅读 385评论 0 3