朱涛 · Kotlin编程第一课

朱涛 · Kotlin编程第一课 / 实战+源码,吃透Kotlin语法与协程

朱涛 Google认证的Kotlin、Android开发者专家,博客“Kotlin Jetpack实战”作者
  • 课程目录
  • 课程介绍
  • 在线阅读:开篇词 | 入门Kotlin有多容易,精通Kotlin就有多难

    这是一个理论与实战结合的课程。在学习的过程中,我希望你能够一边学习,一边跟着我完成课程配套的实战项目。

  • 01 | Kotlin基础语法:正式开启学习之旅

    Kotlin作为一门新的语言,它包含了许多新的特性,由此也决定着Kotlin的代码风格。如果你不够了解Kotlin的这些新特性,你会发现自己只是换了种方式在写Java而已。

  • 02 | 面向对象:理解Kotlin设计者的良苦用心

    在“面向对象”的概念上,虽然Kotlin和Java之间有一定的语法差异,但底层的思想是没有变的。我们需要做的,仅仅只是为我们脑海里已经熟知的概念,再增加一种语法规则而已。

  • 03 | Kotlin原理:编译器在幕后干了哪些“好事”?

    Kotlin的每个语法,最终都会被翻译成对应的Java字节码。但如果你不去反编译,你甚至感觉不到它在幕后做的那些事情。而正是因为Kotlin编译器在背后做的这些翻译工作,才可以让我们写出的Kotlin代码更简洁、更安全。

  • 04 | 实战:构建一个Kotlin版本的四则运算计算器

    我们会通过完成三个不同版本的四则运算计算器,一起梳理前面课程中学习的那些重要的Kotlin的知识点,同时也在这个实操过程中,一起思考代码实现时可能会出现什么问题。

  • 05 | object关键字:你到底有多少种用法?

    理解object关键字背后的统一语义,对我们学习这个语法是极其关键的,因为它才是这三种不同语义背后的共同点。通过这个统一语义,我们可以在这三种语义之间建立联系,形成知识体系。

  • 06 | 扩展:你的能力边界到底在哪里?

    学习就是一个不断向下挖掘探索的过程。学习Kotlin是这样,学习其他计算机知识也是这样,甚至学习其他领域的知识也是这个道理。

  • 07 | 高阶函数:为什么说函数是Kotlin的“一等公民”?

    高阶函数在Kotlin里有着举足轻重的地位。它是Kotlin函数式编程的基石,是各种框架的关键元素。

  • 08 | 实战:用Kotlin写一个英语词频统计程序

    经过这节课的实战演练,你一定可以感受到Kotlin函数式风格的魅力。而在日后不断地学习、实操中,我也希望,你可以把Kotlin函数式的代码应用到自己的开发工作当中,并且充分发挥出Kotlin简洁、优雅、可读性强的优势。

  • 加餐一 | 初识Kotlin函数式编程

    虽然说,Kotlin的函数式编程还不属于主流,但近几年它的关注度也越来越高了,所以今天我们就借着这节加餐,一起来简单聊聊Kotlin的函数式编程,也为上一节实战课做一个延伸。

  • 09 | 委托:你为何总是被低估?

    Kotlin当中看起来毫不起眼的委托,实际上它的功能是极其强大的,甚至可以说它比起扩展毫不逊色。其实,只是因为Kotlin的委托语法要比扩展更难一些,所以它的价值才更难被挖掘出来,进而也就容易被开发者所低估。

  • 10 | 泛型:逆变or协变,傻傻分不清?

    泛型,是对程序的一种抽象。通过泛型,我们可以实现代码逻辑复用的目的,Kotlin标准库当中很多源代码也都是借助泛型来实现的。

  • 11 | 注解与反射:进阶必备技能

    注解,其实就是“程序代码的一种补充”,而反射,其实就是“程序代码自我反省的一种方式”。

  • 12 | 实战:用Kotlin实现一个网络请求框架KtHttp

    命令式还是函数式,完全取决于我们开发者自身。

  • 加餐二 | 什么是“表达式思维”?

    表达式,是一段可以产生值的代码;而语句,则是一句不产生值的代码。

  • 加餐三 | 什么是“不变性思维”?

    通常来说,我们用val定义的临时变量,都会将其看做是不可变的,也就是只读变量。但是别忘了,val还可以定义成员属性。

  • 加餐四 | 什么是“空安全思维”?

    Kotlin的空安全,其实和Kotlin的每一个特性都息息相关。Kotlin的空安全思维,也并不是四个准则就可以完全概括的,不过这四个准则可以为我们指明方向,为我们后面的学习打下基础。

  • 春节刷题计划(一)| 当Kotlin遇上LeetCode

    时光飞逝,不知不觉间,我们就已经完成了基础篇的学习,并且也已经完成了三个实战项目,但这终归是不够过瘾的。想要完全掌握Kotlin的基础语法,我们还需要更多的练习。

  • 春节刷题计划(二)| 一题三解,搞定版本号判断

    在上节刷题课中,我给你留了一个作业:用Kotlin来完成LeetCode的165号题《版本号判断》。那么今天这节课,我就来讲讲我的解题思路,希望能给你带来一些启发。

  • 春节刷题计划(三)| 一题双解,搞定求解方程

    这节课,我们会用两种方式实现LeetCode的640号题《求解方程》。这两种解法的核心思路其实是一致的,不过前者是偏命令式的,后者是偏函数式的。而你要清楚,即使它们是用的一种思路,也仍然是各有优劣的。

  • 春节刷题计划(四)| 一题三解,搞定分式加减法

    我希望你不要把这节课当做Kotlin刷题的终点,而是要把这节课当做一个起点。因为用Kotlin刷算法题,真的是个一举多得的好办法!我们何乐而不为呢?

  • 13 | 什么是“协程思维模型”?

    学习协程,相当于一次编程思维的升级。协程思维,它与我们常见的线程思维迥然不同,当我们能够用协程的思维来分析问题以后,线程当中某些棘手的问题在协程面前都会变成小菜一碟。

  • 14 | 如何启动协程?

    协程是一个非常抽象的概念,因此它的调试手段就显得尤为重要。我们在研究协程的时候,通常有两种手段,一种是设置VM参数:-Dkotlinx.coroutines.debug,另一种是直接在IDE当中打断点。

  • 15 | 挂起函数:Kotlin协程的核心

    挂起函数可以极大地简化异步编程,让我们能够以同步的方式写异步代码。相比“回调地狱”式的代码,挂起函数写出来的代码可读性更好、扩展性更好、维护性更好,也更难出错。

  • 16 | Job:协程也有生命周期吗?

    协程是结构化的并发,这是它的第二大优势。

  • 17 | Context:万物皆为Context?

    这节课,我会从应用的角度出发,带你了解CoroutineContext的使用场景,并会对照源码带你理解它的设计思路,让你能真正理解和掌握协程的上下文,并建立一个基于CoroutineContext的协程知识体系。

  • 18 | 实战:让KtHttp支持挂起函数

    这节课,我们会在KtHttp 1.0版本的基础上,扩展出异步请求的功能,完成3.0版本的开发;以及在3.0版本的基础上,让KtHttp支持挂起函数,这里我们是用的外部扩展的思路,并没有碰KtHttp内部的代码。

  • 期中考试 | 用Kotlin实现图片处理程序

    我们一起来做一个图片处理程序,来考察一下自己对于Kotlin编程知识的理解和应用掌握情况。

  • 题目解答 | 期中考试版本参考实现

    上节课我给你布置了一份考试题,你完成得怎么样了呢?这节课我会来告诉你,我是如何用Kotlin来做这个图片处理程序的,供你参考。

  • 19 | Channel:为什么说Channel是“热”的?

    Channel不是Kotlin独创的概念,在其他编程语言当中也有这样的组件,最典型的就是Go。所以当你学会Kotlin的Channel,以后在别的语言中再遇到Channel,或是基于Channel的Actor,你也能快速地把Kotlin的知识迁移过去。

  • 20 | Flow:为什么说Flow是“冷”的?

    有了Flow以后,Kotlin的协程已经没有明显的短板了。简单的异步场景,我们可以直接使用挂起函数、launch、async;至于复杂的异步场景,我们就可以使用Flow。

  • 21 | select:到底是在选择什么?

    今天这节课,我会从select的使用角度着手,带你理解select的核心使用场景,之后也会通过源码帮你进一步分析select API的底层规律。学完这节课以后,你完全可以将select应用到自己的工作当中去。

  • 22 | 并发:协程不需要处理同步吗?

    Kotlin的协程仍然是基于线程运行的。但是经过一层封装以后,Kotlin协程面对并发问题的时候,它的处理手段其实跟Java就大不一样。所以这节课,我们就来看看协程在并发问题上的处理思路。

  • 23 | 异常:try-catch居然会不起作用?坑!

    今天这节课,我们就会来分析几个常见的协程代码模式,通过解决这些异常,我们可以总结出协程异常处理的6大准则。掌握了这些准则之后,你在以后遇到异常问题时,就能有所准备,也知道该怎么处理了。

  • 24 | 实战:让KtHttp支持Flow

    这节实战课,为了让KtHttp支持Flow API,我们会使用两种方法。第一种是从KtHttp的外部进行扩展,第二种是修改KtHttp的内部,让ApiService当中的方法可以直接以Flow作为返回值类型。

  • 答疑(一)| Java和Kotlin到底谁好谁坏?

    Kotlin的设计思路就是“扬长避短”。Java的优点,Kotlin都可以拿过来;Java的缺点,Kotlin尽量都把它扔掉!这就是为什么很多人会说:Kotlin是一门更好的Java语言(Better Java)。

  • 25 | 集合操作符:你也会“看完就忘”吗?

    Kotlin的集合API,本质上是一种数据处理的模式。

  • 26 | 协程源码的地图:如何读源码才不会迷失?

    不管是什么技术,研究它的底层原理永远不是一件容易的事情。

  • 27 | 图解挂起函数:原来你就是个状态机?

    今天这节课,我会从这个CPS转换开始说起,带你进一步挖掘它背后的细节。在这个过程中,我们还会接触到Kotlin库当中的协程基础元素:Continuation、CoroutineContext与挂起函数的底层联系。

  • 加餐五 | 深入理解协程基础元素

    今天,我会带你系统深入地认识一下Kotlin协程当中的基础元素。等你对协程的基础层有了深入认识以后,下节课研究协程启动原理就会轻松一些了。

  • 28 | launch的背后到底发生了什么?

    在Kotlin协程中,有没有类似Coroutine.kt的类呢?对于这些问题,我们唯有去阅读Kotlin协程的源码,去分析launch的启动流程,才能找到答案。

  • 29 | Dispatchers是如何工作的?

    协程创建出来以后,它是如何跟线程产生关联的?这节课,我们将进一步分析launch的启动流程,去发掘上节课我们忽略掉的代码分支。

  • 30 | CoroutineScope是如何管理协程的?

    使用CoroutineScope,我们可以批量管理同一个作用域下面所有的协程。那么,今天这节课,我们就来研究一下CoroutineScope是如何管理协程的。

  • 31 | 图解Channel:如何理解它的CSP通信模型?

    Channel是热的,同时它还是一个线程安全的数据管道。而由于Channel具有线程安全的特性,因此它最常见的用法就是建立CSP通信模型。可是,我们为什么可以通过Channel实现CSP通信模型呢?

  • 32 | 图解Flow:原来你是只纸老虎?

    理解了Flow、FlowCollector这两个接口,其实就理解了Flow的原理。

  • 33 | Java Android开发者还会有未来吗?

    Java Android开发者还会有未来吗?我认为单纯的Android应用开发者,如果不掌握好Kotlin,一定是会渐渐被淘汰的。

  • 34 | Kotlin与Jetpack简直是天生一对!

    作为Android开发者,如果只用Kotlin不用Jetpack,我们其实很难在Android平台充分发挥Kotlin的语言优势。而如果只用Jetpack而不用Kotlin,那我们只能用到Jetpack的小部分功能。

  • 35 | 用Kotlin写一个GitHub Trending App

    这节课,我们一起来用Kotlin和Jetpack写一个简单的Android应用。

  • 结课测试 | “Kotlin编程第一课”100分试卷等你来挑战!

    一套习题,测一测你的知识掌握程度。

  • 结束语 | 不忘初心

    如果你有什么理想、兴趣爱好,那就勇敢地去追求、去尝试吧!因为,它值得!

50讲

你将获得

  • 系统高效的Kotlin学习路径
  • 对比Java,剖析Kotlin核心知识点
  • 一套独创的协程思维模型
  • 5大实战项目,搞懂Kotlin特性的应用场景

讲师介绍


课程介绍

除此之外,Kotlin最吸引目光的地方就在于它与Java100%互操作,它知道开发者喜欢什么、讨厌什么,它甚至知道开发者容易犯什么样的错误,从而在语言设计的层面就规避错误。这也是很多程序员表示,“Kotlin用过了就回不去”的原因。

但是,当你深入了解了Kotlin之后,会发现这是一门易学难精的语言。

Kotlin的语法非常简洁,确实极其容易入门;但同时,它又拥有许多的新特性,比如协程,比如函数式编程,并不容易掌握。所以这样就会导致,你在学习时很容易浮于语法表面,却体会不到Kotlin设计的美感,悟不出Kotlin特性的应用场景,看不到Kotlin底层的实现原理,也很难能写出优雅的Kotlin代码。

所以,我们邀请了Google官方认证的Android & Kotlin领域开发者专家(GDE)朱涛老师,他是国内第一批探索Kotlin的Android开发者,他会根据自己多年的学习、实践和研究Kotlin编程的经验,从基础知识、协程思维、源码解读、实战项目等不同维度,来帮你快速掌握Kotlin的核心知识点,理解Kotlin的编程思想,让你最终可以用漂亮的Kotlin代码,来解决工作中的问题。

课程模块设计

课程主要分为四大模块。

基础篇:这个模块会帮你集中精力攻克Kotlin的核心语法,包括基础语法、面向对象、高阶函数、扩展、委托、泛型、注解和反射。并且,每学习三到四个语法,就会通过一个实战项目将这些知识点串联起来,从而达到学以致用的目的。

协程篇:协程,是Kotlin当中极其重要的特性,同时也是Kotlin当中极其难学的特性。这个模块会深入讲解协程当中的各个概念,并且会给你介绍协程的思维模型,帮助你完成“线程思维”到“协程思维”的转换。当然,在这个过程中也会结合实战项目,让你能上手体验协程的魅力。

源码篇:在理解了前两个模块的内容之后,你就算是初步掌握Kotlin这门语言了。不过,对于任何知识,不仅要知其然,还要知其所以然。Kotlin官方的源代码其实是一座宝库,里面充满了Kotlin的最佳实践。通过研究Kotlin的源代码,你可以进一步加深对Kotlin理解,同时,也可以去探究它底层的原理。

Android项目篇:目前来说,Kotlin最主要的应用还是在Android领域。因此,在学完前几个模块以后,会再带你来看看Kotlin在Android领域到底能做什么。Kotlin凭什么能被Google指定为“官方语言”?如何使用Kotlin来提升开发效率?如何将Kotlin的特性融入到Android的架构设计中?最后,也会带你一起来用Kotlin写一个简单的Android App。

除此之外,课程在更新过程中还会不定期进行加餐,给你分享Kotlin在各个领域的一些知识,来进一步扩展你的Kotlin知识面。比如,Kotlin协程在后端、Android端的应用、Kotlin Multiplatform在跨平台当中的应用,以及Compose在UI领域的应用。


课程目录


【限时福利】

订阅后,戳此加入「Kotlin读者群」


特别放送

免费领取福利


限时活动推荐


订阅须知

随机推荐

怡颗莓蓝莓评测结果好吗?良心点测!

特仑苏牛奶乳品好不好,推荐购入吗?测评结果报告!

特仑苏牛奶乳品反馈怎么样?用户反馈评测结果!

艾惟诺婴童护肤可以入手吗?亲身评测体验诉说?

bc babycare婴童浴巾-浴衣好不好,入手推荐?买前必知的评测报告...

vivovivo Pad3 Pro可以入手吗?深度爆料评测分享?