朱涛 · 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分试卷等你来挑战!

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

  • 结束语 | 不忘初心

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

你将获得

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

讲师介绍

朱涛,中国区第2位Kotlin、Android领域的谷歌开发者专家(Google Developer Expert),前陌陌内部创新业务的Android负责人。朱涛痴迷于Kotlin、协程等技术的研究,从2017年开始,他就将Kotlin应用到实际工作当中,为团队开发效率带来了极大提升的同时,也改善了数百万Android 用户的使用体验。5年时间里,朱涛在Kotlin协程、Kotlin函数式编程、Kotlin DSL、Jetpack等方面积累了很多实践经验。

朱涛执着于用“简单的方式”解释“复杂的概念”。他从2018年开始就活跃在Kotlin、Android的技术社区,分享他的Kotlin学习经验,在技术大会等场合发表了超过10场Kotlin方面的技术演讲,他的技术博客“Kotlin Jetpack实战”也影响和帮助了数万名Kotlin、Android开发者。

课程介绍

自从被Google点名宣布成为Android的官方开发语言之后,Kotlin不仅关注度日益上升,其应用范围也已从Android开发扩展至后端、跨平台等技术领域,发展前景和“钱景”都十分广阔。

除此之外,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读者群」

特别放送

免费领取福利

限时活动推荐

订阅须知

相关教程

Learnfk - JavaScript教程

Learnfk - Apache POI教程

Learnfk - JSON教程

Learnfk - LISP教程

Learnfk - Scala教程

Learnfk - Git教程

随机推荐

十月结晶智能预约奶瓶消毒器带烘干蒸煮模式三合一深度剖析测评质...

小向鹦鹉款智能感应泡沫洗手机洗手液替换装评测真的很坑吗?入手...

美的电炖锅隔水炖家用蒸汽炖锅全自动炖汤煲汤锅陶瓷煮粥燕窝炖盅...

九阳茶吧机家用多功能智能遥控下置式饮水机评测哪款值得买,评测...

罗技F710无线双震动马达游戏手柄评测值得买吗,评测哪一款功能更...

飞鹤星蕴孕产妇奶粉网友诚实不欺人!真的好吗!