字节+谷歌超全Kotlin学习王炸笔记!Kotlin入门到精通+高级Kotlin强化实战(附Demo)

Android开发者必须要知道的Kotlin

Android开发者在语言限制方面面临着一个困境。众所周知,目前Android开发所用的Java语言比较臃肿,这极大地降低了我们的生产力,同时也迫使我们不得不编写大量的样板与脆弱的代码,然而这样的代码是难以阅读和维护的。幸运的是,Android程序是运行在Java虚拟机之上的,因此从技术上来说,可以运行在JVM之上的一切都可用于开发Android应用。现在已经有很多可以生成JVM能够执行的字节码的语言,其中一些语言开始崭露头角并逐步流行起来,Kotlin就是其中的佼佼者。

何为Kotlin?

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。

Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。

在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。

为何说Kotlin非常适合于Android?

基本上,这是因为Kotlin的所有特性都非常适合于Android生态圈。Kotlin的库非常小,我们在开发过程中不会引入额外的成本。其大小相当于support-v4库,我们在很多项目中所使用的库都比Kotlin大。除此之外,Android Studio(官方的Android IDE)是基于IntelliJ构建的。这意味着我们的IDE对该语言提供了非常棒的支持。我们可以很快就配置好项目,并且使用熟悉的IDE进行开发。我们可以继续使用Gradle以及IDE所提供的各种运行与调试特性。这与使用Java开发应用别无二致。归功于互操作性,我们可以在Kotlin代码中使用Android SDK而不会遇到任何问题。实际上,部分SDK使用起来会变得更加简单,这是因为互操作性是非常智能的,比如说它可以将getters与setters映射到Kotlin属性上,我们也可以以闭包的形式编写监听器。

如何在Android开发中使用Kotlin?

过程非常简单,只需按照下面的步骤来即可:

  • 从IDE plugins中下载Kotlin插件
  • 在模块中创建Kotlin类
  • 使用“Configure Kotlin in Project…”
  • 开始编码

为什么选择 Kotlin?

简洁:大大减少样板代码的数量。
安全:避免空指针异常等整个类的错误。
互操作性:充分利用 JVM、Android 和浏览器的现有库。
工具友好:可用任何 Java IDE 或者使用命令行构建。

Kotlin 在Android开发中那些让人舒适的地方

1.字符模板

开发中难免需要根据多个字段去拼接一条字符串做展示,在过长或者过于复杂的数据逻辑的时候,用Java实现起来都过于冗长。Kotlin 使用 $ 放在变量名的前面去表达字符串中的变量和表达式,从而简化了这一过程。

2.空安全

在使用Java开发Android的过程中,避免不了大量的空安全判定代码,介于Kotlin要很好的兼容Java,在这个问题上Kotlin设计一整套新的类型系统(这里不作研究)来完善优化它。

所有的类型都分为可空和不可空类型,并且针对不可空类型强制要求初始化,在一开始就让开发者高标准的、严谨的使用变量,是一种规范性的要求。但是可空类型可能会在程序中更广泛的应用,针对这一点,Kotlin也有Elvis 操作符来进行安全访问或者避免空值情况。

3.延迟加载

这一点可以说是对不可空类型的更进一步优化,开发中总有一些变量是在某些时机才会被初始化,而不是类加载的时候就加载。延迟加载是很好的东西,可以省去初始化的成本,在变量真正被需要的时候才被初始化。

4.方便易读的循环

Kotlin有区间的概念,这个概念让创建循环更加易读方便。

5.强大易用的迭代器

遍历集合是基操,对于一些稍微复杂一点的数据逻辑,Java实现起来并不友好。

当然后面有了RxJava来进行补救,不过Kotlin做的似乎要更好一点。(这里就不讨论Kotlin的集合框架架构了)

6.默认参数

重载是很比较常见的操作,但是有时候这种方式会出现很多相同的模板代码。Kotlin的默认参数,可以给参数指定默认值,并且在调用的时候像给变量赋值一样给参数赋值`而不用像Java一样非要按照顺序去传值。

并且因为具有默认值的原因,所以调用的时候可以根据具体情况传递参数,更加灵活、更加易读和简洁。

7.Data Class

开发中Bean文件是必不可少的,但是Java的Bean文件大部分都是模版代码,虽然有插件自动生成,但是依然会觉得比较繁琐,Kotlin可以将这些类申明为Data类,这些类会默认实现equals(),hashCode(),toString() 和copy() 方法,从几十行Java代码简洁到几行代码,Kotlin只用声明 一个data class

8.简短而强大的标准函数库

这是Kotlin提供的函数库,使用后会简化不少的样板代码。稍微不一样的地方是它们的this和it各自指向不一样,以及返回值得不一样,使用得时候根据具体得情况来就可以了。

9.通吃的when

对于Java的Stwich再熟悉不过,但是它使用起来有比较多的限制,有时候面对复杂的逻辑会显得乏力。

Kotlin的when表达式可以匹配几乎任何东西(字面值,枚举,数字,范围,类型,表达式,甚至函数(kotlin函数至上))。

10.扩展

扩展可能是最受欢迎的一个特性,因为它可以让你少写很多工具类,并且让代码看起来更易读,更简洁。比如做一个防止重复点击的操作。

11.简单的Bundle 快速的Parcelable

一开始我并没有注意到这个特性,因为项目是组件化开发,在跳转传值上都采用了ARouter,但是当我发现Kotlin对这个做的改造的时候还是非常开心~

小总结:
如上所述,Kotlin在很多方面都简化了Android的开发工作。它会提升你的生产力,并且可以通过非常不同且更加简单的方式来解决一些常见的问题。

那么我们该如何学习Kotlin呢?

如果你是因为缺少学习资料,而我正好薅到这本谷歌内部大佬根据实战编写的Kotlin宝典,从入门到精通,教程通俗易懂,实例丰富,既有基础知识,也有进阶技能,能够帮助读者快速入门,是你学习Kotlin的葵花宝典,快收藏起来!!!

今天分享的一共分为两部分:字节跳动厂内部超高质量Kotlin笔记、谷歌大佬编写高级Kotlin强化实战(附Demo)。

一、字节跳动厂内部超高质量Kotlin笔记

首先目录乘上:

1.准备开始

主要内容:基本语法、习惯用语、编码风格

2.基础

主要内容:基本类型、包、控制流、返回与跳转

3.类和对象

主要内容:类和继承、属性和字段、接口、可见性修饰词、扩展、数据对象、泛型、嵌套类、枚举类、对象表达式和声明、代理模式、代理属性

4.函数和lambda表达式

主要内容:函数、高阶函数与 lambda 表达式

5.其它

主要内容:多重申明,Ranges,类型检查和自动转换,This表达式,等式,运算符重载,空安全,异常,注解,反射,动态类型

6.互用性

主要内容:动态类型

7.工具

主要内容:使用Maven、使用 Ant、使用 Gradle、使用Griffon

8.FAQ

主要内容:与java对比、与Scala对比

点击查看:字节跳动厂内部超高质量Kotlin笔记

基础知识掌握之后就是靠实战提升了!

二、谷歌大佬编写高级Kotlin强化实战(附Demo)

照样目录乘上:

第一章 Kotlin 入门教程

  • Kotlin 概述
    • Kotlin 特点
    • 学习 Kotlin 的意义
  • Kotlin 与 Java 比较
    • 打印日志
    • 定义常量与变量
    • null 声明
    • 空判断
    • 字符串拼接
    • 三元表达式
    • 多重条件
    • 更灵活的 case 语句
    • for 循环
    • 更方便的集合操作
    • 遍历
    • 方法定义
    • constructor 构造器
    • Get Set 构造器
    • 操作符
    • 换行
  • 巧用 Android Studio
    • 为已有基于 Java 的 Android 项目添加Kotlin 支持
    • 将 Java 文件转成 Kotlin 文件
  • 认识 Kotlin 基本类型
    • 基本类型代码演练

  • 走进 Kotlin 的数组
    • Kotlin 数组的创建技巧
    • Kotlin 数组的遍历技巧
    • 数组代码演练
  • 走进 Kotlin 的集合
    • 集合的可变性与不可变性
    • 集合排序
    • 集合中的 Set 与 Map
  • 集合问题
  • 完整代码
  • 基础语法
    • 所有 Kotlin 类都是对象 (Everything in Kotlin is an object)
    • 可见性修饰符 (Visibility Modifiers)
    • 变量定义 (Defining Variables)
    • 空安全 (Null Safety)
    • 类型检查与转换 (Type Checks and Casts)
    • if 判断
    • for 循环
    • when
    • 相等性 (Equality)
    • 函数 (Functions)
    • 类 (Classes)
    • 继承 (Inheritance)
    • This 表达式 (Expression)
    • 数据类 (Data Class)
    • 扩展 (Extensions)
    • 委托 (Delegation)

第二章 Kotlin 实战避坑指南

  • 方法入参是常量,不可修改
  • 不要 Companion 、INSTANCE ?
  • Java 重载,在 Kotlin 中怎么巧妙过渡一下?
  • Kotlin 中的判空姿势
  • Kotlin 复写 Java 父类中的方法
  • Kotlin “狠”起来,连TODO 都不放过!
  • is、as` 中的坑
  • Kotlin 中的 Property 的理解
  • also 关键字
  • takeIf 关键字
  • 单例模式的写法

第三章 项目实战《Kotlin Jetpack 实战》

  • 从一个膜拜大神的 Demo 开始
    • 简介
    • 工程结构
  • Kotlin 写 Gradle 脚本是一种什么体验?
    • Kotlin 编写 Gradle 脚本的优势
    • 实战前的准备
    • 开始重构
    • Kotlin DSL 实战--依赖管理
  • Kotlin 编程的三重境界
    • 前期准备
    • 为工程添加 Kotlin 支持
  • Kotlin 高阶函数
    • 函数类型,高阶函数,Lambda,它们分别是什么?
    • 为什么要引入 Lambda 和 高阶函数?
    • 带接收者(Receiver)的函数类型:A.(B,C) -> D
    • HTML Kotlin DSL 实战

  • Kotlin 泛型
    • 遥控器的故事:泛型
    • 招聘的故事:泛型的不变性(Invariant)
    • 搞定招聘:泛型的协变(Covariant)
    • 填志愿的故事:泛型的逆变(Contravariant)
    • 使用处型变(Use-site Variance)
    • Kotlin 泛型实战
  • Kotlin 扩展
    • 扩展是什么?
    • 顶层扩展 (Top Level Extension)
    • 顶层扩展的原理是什么?
    • 类内扩展 (Declaring extensions as members)
    • 扩展函数 + SharedPreferences
    • 扩展函数 + Spannable
  • Kotlin 委托
    • 委托类(Class Delegation)
    • 委托属性(Property Delegation)
    • 自定义委托属性
    • 委托属性 + SharedPreferences
  • 协程“不为人知”的调试技巧
    • 协程 JVM 参数
    • Kotlin 1.4 协程调试
  • 图解协程:suspend
    • 线程 & 协程
    • 异步代码 & 回调地狱
    • suspend 的本质
    • CPS 转换
    • 字节码反编译
    • 协程状态机动画演示

点击查看:高级Kotlin强化实战(附Demo)

由于篇幅较长,就暂时只展示这些。

最后还有耗时一年多整理的一系列Android学习资源:Android源码解析、Android第三方库源码笔记、Android进阶架构师七大专题学习、历年BAT面试题解析包、Android大佬学习笔记等等,这些内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容

猜你喜欢

转载自blog.csdn.net/weixin_44339238/article/details/113184083