https://github.com/enbandari/Kotlin-Tutorials

随着Kotlin越来越成熟稳定,我已经开始在生产环境中使用它。考虑到目前国内资料较少,近期我开始筹划录制一套视频教程,并以此抛砖引玉,让 Kotlin 在国内火起来。

个人水平有限,不足之处欢迎大家发邮件到 bennyhuo@println.net,谢谢大家!

发布计划

关注微信公众号:Kotlin, 获取最新视频更新动态

从10月初开始,每期视频控制在10-20分钟,更新间隔视情况而定,尽量在每周能至少更新一期。

  • 10月14日:思考了一下,我决定将视频的内容调整为几个案例,而不是传统的教条式的讲述,因为。。我录得时候发现我自己都困了哈哈

    在线收看全部视频(腾讯视频)

    下载全部视频(百度云)

  • 11月6日:大家有什么关心的技术点也可以在issue里面发出来一起讨论哈,我也会根据大家的需求来安排后面的内容。

  • 11月28日:有朋友问我,为什么要『放弃』。。。额,这是一个用来自嘲的梗嘛,大家不信去搜搜 『Java 从入门到放弃』 :)
  • 12月2日:有朋友说内容太少啦,不够看!我首先要表示一下感谢,谢谢诸位的关注和支持~这套视频是我在工作之余抽时间录制的,一个视频虽然只有10分钟,不过内容点却不太好想,通常一个视频我会尝试准备几个点,最终选择一个合适的录制,所以更新速度不会太快,不过,我会尽量保证在每周一更新一期,说实话我也挺着急,哈哈~还有一个事情就是,编程语言这个东西本身并不难,难的是它身后的一大家子(生态),Kotlin 的身后就是积累多年的 Java 生态,如果大家对视频有疑问,尽管发邮件或者直接开 issue 跟我讨论,我也可以考虑录一些『番外篇』来解答这些问题,谢谢大家的支持!
  • 12月19日:这一套视频从一开始也没有明确的大纲,我只是希望能讲一些网络上的文章不怎么提到的一些细节,或者分享一些我觉得有意思的话题。我想了一下,有了下面这几期,大家基本上可以入手尝试自己写点儿什么了,这样我的目的也就达到了。公众号还会持续推送 Kotlin 有意思的话题,请大家关注~ 基础部分已完结。

目录

第一部分 语言基础(已完结)

01 Kotlin 简介

  简要介绍下什么是 Kotlin,新语言太多了,大家为什么要接触 Kotlin 呢?因为它除了长得与 Java 不太像以外,其他的都差不多~

02 Hello World

  千里之行,始于Hello World!

03 使用Gradle编写程序简介(可选)

  这年头,写 Java 系的代码,不知道 Gradle 怎么行呢?

04 集合遍历 map

  放下 i++,你不知道 map 已经占领世界了么?以前我以为 map-reduce 很牛逼,后来才知道就是数据迭代处理嘛。

05 集合扁平化 flatMap

  这个可以说是 map 的一个加强版,返回的仍然是开一个可迭代的集合,用哪个您自己看需求~

06 枚举类型与When表达式

  Kotlin 丢掉了 switch,却引进了 when,这二者看上去极其相似,不过后者却要强大得多。至于枚举嘛,还是 Java 枚举的老样子。

07 在 RxJava 中使用 Lambda

  这一期通过一个统计文章中字符数的小程序进一步给大家呈现 Lambda 的威力,也向大家展示一下如何在 Kotlin 当中优雅地使用 RxJava。我不做教科书,所以如果大家对概念感兴趣,可以直接阅读官方 API

  RxJava 是一个非常流行的 Java Reactive 框架,函数式的数据操作使得 Lambda 表达式可以充分体现自己的优势,比起 Java 的冗长,你会看到一段非常漂亮简洁的代码。建议大家先阅读 RxJava 的官方文章以对其有一些基本的认识。

08 使用 Retrofit 发送 GET 请求

  Retrofit 是 Square 的 Jake 大神开源的RESTful 网络请求框架,用它发送请求的感觉会让你感觉爽爆的。我这里还有几篇文章,以及一个我 hack 过的分支 HackRetrofit,有兴趣的童鞋可以一起探讨下~

  • Android 下午茶:Hack Retrofit 之 增强参数.

  • Android 下午茶:Hack Retrofit (2) 之 Mock Server

  • 深入浅出 Retrofit,这么牛逼的框架你们还不来看看?

09 尾递归优化

  尾递归,顾名思义,就是递归中调用自身的部分在函数体的最后一句。我们知道,递归调用对于栈大小的考验是非常大的,也经常会因为这个导致 StackOverflow,所以尾递归优化也是大家比较关注的一个话题。Kotlin 支持语法层面的尾递归优化,这在其他语言里面是不多见的。

10 单例

  单例大家一定都不陌生,只要你动手写一个程序,就免不了要设计出一些全局存在且唯一的对象,他们就适合采用单例模式编写。在 Java 里面,单例模式的写法常见的有好几种,虽然简单却也是涉及了一些有意思的话题,那么在 Kotlin 当中我们要怎么设计单例程序呢?

11 Sealed Class

  枚举类型可以很好的限制一个类型的实例个数,比如 State 枚举有两种类型 IDLE 和 BUSY 两种状态,用枚举来描述再合适不过。不过,如果你想要设计子类个数有限的数据结构,比如指令,指令的类型通常是确定的,不过对于某些有参数的指令每一次都使用同一个实例反而不合适,这时候就需要 Sealed Class。   

12 Json数据引发的血案

  Json 数据可真是大红大紫一番,它实在是太容易理解了,随着 Js 的火爆它就更加『肆无忌惮』起来。我们在 Java/Kotlin 当中解析它的时候经常会用到 Gson 这个库,用它来解析数据究竟会遇到哪些问题?本期主要围绕 Json 解析的几个小例子,给大家展示一下 Java/Kotlin 的伪泛型设计的问题,以及不完整的数据的解析对语言本身特性的冲击。

13 kapt 以及它的小伙伴们

  首先感谢 @CodingPapi,这一期的内容主要来自于他的建议。

  Kotiln 对于注解的支持情况在今年(2016)取得了较大的成果,现在除了对 @Inherited 这个注解的支持还不够之外,试用了一下没有发现太大的问题。关于 kapt,官方的文章罗列下来,其中

  • kapt: Annotation Processing for Kotlin 已经过时了,大家可以阅读下了解其中提到的三个方案

  • Better Annotation Processing: Supporting Stubs in kapt 提到的实现其实基本上就是现在的正式版

  • Kotlin 1.0.4 is here 提到了 kapt 的正式发布,需要注意的是,kapt 的使用方法有些变化,需要 apply plugin: 'kotlin-kapt'

  本期主要通过一个简单的 Dagger2 实例给大家展示了注解在 Kotlin 当中的使用,看上去其实与在 Java 中使用区别不大,生成的源码也暂时是 Java 代码,不过这都不重要了,反正是要编译成 class 文件的。

  后面我们又简单分析了一下 Dagger2 以及 ButterKnife 的源码(有兴趣的话也可以看下我直接对后者进行分析和 Hack 的一篇文章:深入浅出 ButterKnife,听说你还在 findViewById?),其实自己实现一个注解处理器是非常容易的,类似的框架还有androidannotations,它的源码大家可以自行阅读。


通过这个例子,我们其实发现 kapt 还是有一些不完善的地方,主要是:

  1. 不支持 @Inherited
  2. 生成的源码需要手动添加到 SourceSets 中
  3. 编译时有时候需要手动操作一下 gradle 的 build 才能生成源码(这一点大家注意下就行了,我在视频中并没有提到)

不过总体来讲,kapt 的现状还是不错的,相信不久的将来这些问题都将不是问题。


14 Kotlin 与 Java 共存 (1)

  你想要追求代码简洁、美观、精致,你应该倾向于使用 Kotlin,而如果你想要追求代码的功能强大,甚至有些黑科技的感觉,那 Java 还是当仁不让的。

  说了这么多,还是那句话,让他们共存,各取所长。

  那么问题来了,怎么共存呢?虽然一说理论我们都知道,跑在 Jvm 上面的语言最终都是要编成 class 文件的,在这个层面大家都是 Java 虚拟机的字节码,可他们在编译之前毕竟还是有不少差异的,这可如何是好?

  正所谓兵来将挡水来土掩,有多少差异,就要有多少对策,这一期我们先讲在 Java 中调用 Kotlin。

15 Kotlin 与 Java 共存 (2)

  上一期我们简单讨论了几个 Java 调用 Kotlin 的场景,这一期我们主要讨论相反的情况:如何在 Kotlin 当中调用 Java 代码。

  除了视频中提到的点之外还有一些细节,比如异常的捕获,集合类型的映射等等,大家自行参考官方文档即可。在了解了这些之后,你就可以放心大胆的在你的项目中慢慢渗透 Kotlin,让你的代码逐渐走向简洁与精致了。

第二部分 使用 Kotlin 进行 Android 开发(待定)

打赏

录制这样一套视频确实是需要花费时间和心血的,如果您觉得它对您有帮助,可以通过微信和支付宝打赏,我将努力将视频做到最好!谢谢!

Kotlin从入门到『放弃』系列 视频教程相关推荐

  1. 2014-Unity3d基础入门到高级全套全系列视频教程

    加入QQ群302040480或加QQ2521238762,免费索取教程 2014-Unity3d基础入门到高级全套全系列视频教程下载: 1.Unity游戏大鬼战斗制作视频教程 2.游戏蛮牛 第二季 U ...

  2. 『摄影欣赏』20幅精美的秋天落叶风景欣赏【组图】

    你知道 autumn 是秋天的意思,但是或许你并不知道 fall 也有秋天的意思.秋天是个落叶的季节,你是否在遗憾,秋天如此的短暂,没来得及欣赏美丽的秋景,就将迎来寒冷冬日?那看看下面这组图吧,世界上 ...

  3. 『网络安全』蜜罐到蜜网入门指南(一)蜜罐初识

    网络安全,重于泰山,人人有责! 蜜罐,是一种网络安全产品.本文作为<『网络安全』蜜罐到蜜网入门指南>系列的第一篇,从网络安全着手,由浅入深,逐步介绍,带大家初步认识蜜罐. 一.网络安全 如 ...

  4. 『网络安全』蜜罐到蜜网入门指南(二)蜜罐的起源、作用及分类

    原创不易,点个赞呗!如果喜欢,欢迎随意赞赏. 前言 大家好,<『网络安全』蜜罐到蜜网入门指南>进入第二篇. 在第一篇,我们由网络安全入手,由浅入深,引出蜜罐概念. 从这一篇开始,我们将主要 ...

  5. 入门到放弃node系列之网络模块(二)

    为什么80%的码农都做不了架构师?>>>    前言 本文首发[一名打字员] 上一节我们刚刚介绍完node的HTTP和HTTPS模块,相信我们也对nodejs有了更深层次的理解,接下 ...

  6. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  7. 10月碎碎念-谈谈『自我放弃』

    总第247篇/张俊红 每月一篇的碎碎念又来了,这一篇谈谈『自我放弃』,这里的自我放弃是一种比较积极的放弃,而非表面意思. 为啥要写这个呢,是因为最近经常会听到各种轻生的新闻,有学生.有上班族.有各种各 ...

  8. 「爬虫入门」拒绝跟热点搞python,直接在浏览器里体验『第一次』,理解原理=>如鱼得水

    简介:没用过爬虫,现在有门课正好需要我们去学,于是试了下.想从实践入手,因此,给自己提了个需求:『把微信公众号的授权管理页面的开白名单抓出来』.并没有什么难度,这是我第一次独立写 JavaScript ...

  9. 『论文复现系列』3.Glove

    ★★★ 本文源自AlStudio社区精品项目,[点击此处]查看更多精品内容 >>> 『论文复现系列』3.Glove Glove 论文 | Global Vectors for Wor ...

最新文章

  1. PCB设计要点-DDR3布局布线技巧及注意事项
  2. 2013手机App发展趋势预测:遇冷和洗牌
  3. 【线上分享】音频多麦盲分技术
  4. 使用SharedPreferences
  5. ASP.NET MVC的ContentResult
  6. 框架升级后某个类型所在程序集发生转移,应用还能正常运行吗?
  7. 给 layui upload 带每个文件的进度条, .net 后台代码
  8. 合理使用Blob/Clob
  9. Eclipse Egit 安装
  10. java语言判断101到200之间素数
  11. ubuntu下配置smbd服务器,Windows访问Linux目录
  12. 微软认知服务应用秘籍 – 支持跨平台客户端的视觉服务中间层
  13. uni.app H5(微信公众号定位) uni.getLocation
  14. 联通数据能力开放平台介绍
  15. android ca,如何在Android设备上安装可信CA证书?
  16. 安装Ubuntu20.04后我做的那些事:插件,美化
  17. cogs 1487 麻球繁衍
  18. UIKeyboardTypeNumberPad和丢失的return键
  19. unity android输入法,Unity输入法相关(IME)
  20. 每天学命令flipOrRotateObject

热门文章

  1. 如何用Heidisql本地连接阿里云RDS数据库
  2. 三丰三坐标编程基本步骤_蔡司三坐标测量机操作技巧,有蔡司三坐标的工厂都清除清楚吗?...
  3. dhu 4.1 队列模板简单应用算法设计:士兵队列训练
  4. Day3 C - 士兵队列训练问题
  5. 中间件学习笔记——ElasticSearch
  6. SolidWorks零件库在哪里?如何在SolidWorks中添加零件库?
  7. 电动汽车单轮驱动防滑控制系统ASR
  8. 本公众号将分享有关开关电源的仿真与计算
  9. c语言表达式语法问题,c语言表达式语法规则是什么_后端开发
  10. 最新GLove词向量预训练文件国内服务器下载