├── .gitattributes
├── .gitignore
├── .idea
└── dictionaries
│ └── loser_s_computer.xml
├── KotlinLearn.iml
├── README.md
├── _config.yml
├── img
├── ic_kotlin.png
└── ic_qq.png
├── pom.xml
└── src
└── main
└── java
└── com
└── kotlin
└── leran
├── TestApplication.kt
├── basis
├── Constant.kt
├── ControlStatementDemo.kt
├── DataTypeDemo.kt
├── HelloWorld.kt
├── NoteDemo.kt
├── NullAndNullCheckDemo.kt
├── OperatorDemo.kt
├── OperatorStringDemo.kt
└── VariableAndConstantDemo.kt
├── cls
├── TypealiasDemo.kt
└── classDemo
│ ├── AbstractClassDemo.kt
│ ├── ClassDemo1.kt
│ ├── DataClassDemo.kt
│ ├── EnumDemo.kt
│ ├── FieldDemo.kt
│ ├── InheritClsDemo.kt
│ ├── InnerClassDemo.kt
│ ├── InterfaceDemo.kt
│ └── SealedClassDemo.kt
├── coroutines
├── Basis.kt
└── CancelCoroutineDemo.kt
├── design
├── adapter
│ ├── TestAdapter.kt
│ ├── cls
│ │ ├── ClsAdaptee.kt
│ │ ├── ClsAdapter.kt
│ │ └── ClsTarget.kt
│ ├── default
│ │ ├── AnimListener.kt
│ │ ├── Listener.kt
│ │ └── MyAnimListener.kt
│ └── obj
│ │ ├── ObjAdaptee.kt
│ │ ├── ObjAdapter.kt
│ │ └── ObjTarget.kt
├── factory
│ ├── TestFactory.kt
│ ├── method
│ │ ├── demo1
│ │ │ ├── FactoryA.kt
│ │ │ ├── FactoryB.kt
│ │ │ ├── IFactory.kt
│ │ │ ├── IProduce.kt
│ │ │ ├── ProduceA.kt
│ │ │ └── ProduceB.kt
│ │ └── demo2
│ │ │ ├── AmericaFactory.kt
│ │ │ ├── ApplePhone.kt
│ │ │ ├── HuaweiFactory.kt
│ │ │ ├── HuaweiPhone.kt
│ │ │ ├── IChinaFactory.kt
│ │ │ ├── IChinaPhone.kt
│ │ │ ├── IPhone.kt
│ │ │ ├── IPhoneFactory.kt
│ │ │ ├── XiaoMiFactory.kt
│ │ │ └── XiaoMiPhone.kt
│ └── simple
│ │ ├── demo1
│ │ ├── Apple.kt
│ │ ├── Banana.kt
│ │ ├── FirstFruitFactory.kt
│ │ ├── Grape.kt
│ │ ├── IFruit.kt
│ │ ├── SecondFruitFactory.kt
│ │ └── ThirdFruitFactory.kt
│ │ ├── demo2
│ │ ├── Produce.kt
│ │ └── ProduceFactory.kt
│ │ └── demo3
│ │ └── ConcreteProduce.kt
├── observer
│ ├── TestObserver.kt
│ └── demo1
│ │ ├── ConcreteObserver.kt
│ │ ├── ConcreteSubject.kt
│ │ ├── Observer.kt
│ │ └── Subject.kt
├── policy
│ ├── TestPolicy.kt
│ └── demo
│ │ ├── CarTicket.kt
│ │ ├── GaoTieTicket.kt
│ │ ├── IBuyTicket.kt
│ │ └── PlaneTicket.kt
├── proxy
│ ├── TestProxy.kt
│ ├── dynamic
│ │ ├── cglib
│ │ │ ├── Car.kt
│ │ │ └── TestCglibFactory.kt
│ │ └── jdk
│ │ │ ├── Boat.kt
│ │ │ ├── IDynamicTicket.kt
│ │ │ ├── Plane.kt
│ │ │ ├── ProxyHandler.kt
│ │ │ └── Railway.kt
│ └── statics
│ │ ├── demo1
│ │ ├── Driver.kt
│ │ ├── FirstDriver.kt
│ │ ├── IStaticMoney.kt
│ │ └── MoneyProxy.kt
│ │ └── demo2
│ │ ├── IStaticTicket.kt
│ │ ├── PlaneProxy.kt
│ │ ├── RailwayProxy.kt
│ │ └── User.kt
└── singleton
│ ├── FifthInstance.kt
│ ├── FirstInstance.kt
│ ├── FourthInstance.kt
│ ├── KotlinInstance.kt
│ ├── SecondInstance.kt
│ ├── SeventhInstance.kt
│ ├── SixthInstance.kt
│ └── ThirdInstance.kt
├── function
├── BasisFunctionDemo.kt
├── ExpandFunDemo.kt
├── InfixFunDemo.kt
├── InlineFunDemo.kt
├── SeniorFunctionDemo.kt
└── lambda
│ └── LambdaDemo.kt
└── other
├── CollectionDemo.kt
└── OperaCollectionDemo.kt
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 | *.css linguist-vendored
3 | *.scss linguist-vendored
4 | *.js linguist-vendored
5 | *.xml linguist-vendored
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Compiled class file
2 | *.class
3 |
4 | # Log file
5 | *.log
6 |
7 | # BlueJ files
8 | *.ctxt
9 |
10 | # Mobile Tools for Java (J2ME)
11 | .mtj.tmp/
12 |
13 | # Package Files #
14 | *.jar
15 | *.war
16 | *.ear
17 | *.zip
18 | *.tar.gz
19 | *.rar
20 |
21 | # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml
22 | hs_err_pid*
23 |
--------------------------------------------------------------------------------
/.idea/dictionaries/loser_s_computer.xml:
--------------------------------------------------------------------------------
1 |
7 | 8 |  9 | 10 |
11 | 12 | ## 写这个系列教程的初衷 13 | 14 | 本人作为一个`Android`开发者,在`Kotlin`语言正式出现在人们面前的时候,或多或少的接触到了这门语言,并 15 | 自学了一部分,当`Google`宣布`Kotlin`成为`Android`开发的标准语言时,才有打算用心的去学习这门语言,并能用于实际的开 16 | 发当中。在我学习的过程中,学的越深入越被`Kotlin`的简洁以及良好的阅读性深深的折服。但是在官方的文档中,写 17 | 的实列不是很详细,有些代码甚至看不懂其实现,基础性的东西几乎不存在。如果你没有一定的编程经验我相信你也是看不懂的。 18 | 19 | 但是请你不要放弃对这门语言的学习,我也是一点一点学习过来的,你在学习过程中遇到的坑,可能我也遇到过。我非常欢迎各位 20 | 一起学习、一起探索。让我们共同进步。 21 | 22 | 所以,我会根据自身的编程经验去写完整个`Kotlin`系列文章。整个教程由浅入深,即使你没有编程经验你也能看懂,教程中会 23 | 介绍`Koltin`的特性,以及其和`Java`的差异性。让更多的朋友爱上这门语言。 24 | 25 | ## 开撸 26 | 话不多说,让我们忘记生活的烦恼、放下沉重的枷锁、沉浸在代码的世界中,放大音乐分贝,迈开脚步开始学习`Kotlin`大法吧。 27 | 28 | ## 学习架构 29 | 我把这个教程命名为:从无到有系列,这个系列目前还没写完,故而下面的链接有一些是没有实际内容的,我会在后面持续的补齐,这里只是实现了整个教程的大纲。 30 | 31 | 整个项目根据学习的难以程度以及学习路线我分为了五个模块。我会按照的学习架构去排序。大家可以按照这个顺序去学习... 32 | 33 | #### 引言 34 | - [1、 17 位谷歌 Android 开发专家是如何看待 Kotlin 的?](https://mp.weixin.qq.com/s/mWPJiefaNpK8EuoJYvhbhg) 35 | - [2、 用 Kotlin 开发 Android 项目是一种什么样的感受?(一)](https://www.jianshu.com/p/8a1fce6fa93a) 36 | - [3、 用 Kotlin 开发 Android 项目是一种什么样的感受?(二)](https://www.jianshu.com/p/b444aea1b038) 37 | 38 | #### 初级篇 39 | > 对于入门篇的内容不多,主要是讲解了`Kotlin`中的基础语法,涵盖了`开发环境搭建`、`变量`、`常量`、`注释`、`数据类型`、`控制语句`,`操作符重载`、`空安全`、`基本函数`、`字符串处理`等 40 | 41 | - [1、 开发环境搭建](https://juejin.im/post/5a37e2dbf265da43231b1504) 42 | - [2、 变量、常量、注释](https://juejin.im/post/5a39ef7af265da4311205967) 43 | - [3、 数据类型](https://juejin.im/post/5a36020b6fb9a0451543f5c8) 44 | - [4、 逻辑控制语句](https://juejin.im/post/5a369ccaf265da4325296247) 45 | - [5.1、 一元、二元操作符](https://juejin.im/post/5a4ce9865188257d6a7ef291) 46 | - [5.2、 比较、区间、未运算操作符(未完成)](#) 47 | - [6、 可空类型、空安全、类型转换](https://juejin.im/post/5a5b06f26fb9a01cb42c5206) 48 | - [7、 基础函数使用](https://juejin.im/post/5a6377425188257329148665) 49 | - [8、 字符串的常用操作总结](https://juejin.im/post/5b0ae06df265da0db64e3d63) 50 | 51 | #### 中级篇 52 | > `Kotlin`是一门`面向对象`的开发语言。既然是面向对象,则在中级篇主要讲解其`三大特性`,以及`类成员`、`数据类`、`抽象类`、`接口类`、`内部类`、`继承类`等关于`Kotlin`面向对象的方方面面的讲解 53 | 54 | - [1、 类的声明与使用](https://juejin.im/post/5a3297de6fb9a045055e295e) 55 | - [2、 属性与字段](https://juejin.im/post/5a6378266fb9a01ca10b00e4) 56 | - [3、 可见性修饰符](https://juejin.im/post/5a3293ec51882531926ebfe6) 57 | - [4、 继承类](https://juejin.im/post/5a6303fb51882573467d0fbc) 58 | - [5、 接口类、枚举类](https://juejin.im/post/5a34c551518825552b3f9c91) 59 | - [6、 数据类、密封类](https://juejin.im/post/5a37e4b45188253aea1f7219) 60 | - [7、 抽象类、内部类、嵌套类](https://juejin.im/post/5a48a0e8518825455f2fa070) 61 | - [8、 类型别名与属性名冲突解决](https://juejin.im/post/5c8cbd45f265da2dda6997d3) 62 | - [9、 解构声明(未完成)](#) 63 | - [10、伴生对象与对象声明(未完成)](#) 64 | 65 | #### 高级篇 66 | > 高级篇的内容要多一些,只要是对`Kotlin`中的高级用法以及一些独特的东西。涵盖了`lambda表达式`、`高阶函数`、`集合`、`泛型`、`扩展`、`委托`、`异常处理`、`注解`、`反射`、`协程`等 67 | 68 | - [1、 Lambda表达式](https://juejin.im/post/5ab9a5ccf265da239f076284) 69 | - [2、 高阶函数](https://juejin.im/post/5b198c675188257d7a49b3ec) 70 | - [3、 内联函数(未完成)](#) 71 | - [4.1、 集合的使用](https://juejin.im/post/5ab7a9c4f265da2377196038) 72 | - [4.2、 集合的常用操作符总结](https://juejin.im/post/5b1f7699f265da6e155d5965) 73 | - [5、 泛型(未完成)](#) 74 | - [6、 扩展(未完成)](#) 75 | - [7、异常处理(未完成)](#) 76 | - [8、 委托(未完成)](#) 77 | - [9、 注解(未完成)](#) 78 | - [10、 反射(未完成)](#) 79 | - [11、 协程(未完成)](https://github.com/Kotlin/kotlinx.coroutines) 80 | 81 | #### 进阶篇 82 | > 进阶篇主要讲解的是在实际开发项目中的注意事项及一些高级操作,例如`Kotlin`中的`设计模式`、`编码规范`等 83 | 84 | - [1、 约定俗成的编码规范(未完成)](#) 85 | - [2、 单列模式(未完成)](#) 86 | - [3、 工厂方法模式(未完成)](#) 87 | - [4、 抽象工厂模式(未完成)](#) 88 | - [5、 建造者模式(未完成)](#) 89 | - [6、 原型模式(未完成)](#) 90 | - [7、 适配器模式(未完成)](#) 91 | - [8、 桥接模式(未完成)](#) 92 | - [9、 组合模式(未完成)](#) 93 | - [10、 装饰模式(未完成)](#) 94 | - [11、 外观模式(未完成)](#) 95 | - [12、 享元模式(未完成)](#) 96 | - [13、 代理模式(未完成)](#) 97 | - [14、 职责链模式(未完成)](#) 98 | - [15、 命令模式(未完成)](#) 99 | - [16、 解释器模式(未完成)](#) 100 | - [17、 迭代器模式(未完成)](#) 101 | - [18、 中介者模式(未完成)](#) 102 | - [19、 备忘录模式(未完成)](#) 103 | - [20、 观察者模式(未完成)](#) 104 | - [21、 状态模式(未完成)](#) 105 | - [22、 策略模式(未完成)](#) 106 | - [23、 模版方法模式(未完成)](#) 107 | - [24、 访问者模式(未完成)](#) 108 | 109 | #### 实战篇 110 | > 实战篇主要向大家介绍使用`Kotlin`开发`Android`项目时,介绍一些常用和`Kotlin`一起开发的库,以及对他们的使用及讲解。 111 | 比如说`Anko`、`Dagger2`、`RxKotlin`、或者用`Kotlin`编写的一些自定义组件等等... 112 | 113 | - [1、 使用Anko,让你告别xml布局](https://github.com/Jetictors/anko_kotlin_gank_client) 114 | - [2、 Kotlin中使用Dagger2的坑](https://github.com/Jetictors/kotlin-java-dagger2) 115 | - [3、 RxKotlin总结(未完成)](#) 116 | - [4、 使用Koltin编写一个竖行显示的TextView(未完成)](#) 117 | 118 | ## 其他 119 | 120 | 在这里我意思整合了一些关于`Kotlin`的学习资源,以供大家学习。 121 | 122 | #### 官网 123 | - [Kotlin官网文档](https://kotlinlang.org/docs/reference/) 124 | - [kotlin中文官网文档](http://www.kotlincn.net/docs/reference/) 125 | - [Kotlin在线IDE](https://try.kotlinlang.org/) 126 | - [Kotlin On Github](https://github.com/JetBrains/kotlin) 127 | 128 | #### 视频教程 129 | - [Kotlin系列视频教程](https://github.com/enbandari/Kotlin-Tutorials) 130 | 131 | #### 书籍 132 | 关于书籍的分享,这里有着官网的中英文`PDF`文档,`Kotlin`极简教程、`Kotlin`程序开发入门经验等等书籍。这些我都分享在了我的`Kotlin`交流群里面。这里就不一一的分享了。 133 | 134 | #### 更多 135 | - [Kotlin相关经验文章](https://juejin.im/tag/Kotlin?utm_source=awesome_kotlin&utm_medium=jjzl) 136 | 137 | #### 开源项目 138 | - [GankClient-Kotlin](https://github.com/githubwing/GankClient-Kotlin) —— 用`Koltin`编写的`Gank`客户端 139 | - [PoiShuhui-Kotlin](https://github.com/wuapnjie/PoiShuhui-Kotlin) —— 用`Kotlin`写的简单漫画APP 140 | - [KotlinMvp](https://github.com/git-xuhao/KotlinMvp) —— 基于`Kotlin+MVP+Retrofit+RxJava+Glide`等架构实现短视频类APP练手项目,UI简约,详细注释 141 | - [Eyepetizer-in-Kotlin](https://github.com/LRH1993/Eyepetizer-in-Kotlin) —— 用`Kotlin`撸一款`Eyepetizer` 142 | 143 | ## 最后 144 | 我相信在你学完整个系列教程之后,一定是可以用`Kotlin`进行实际项目开发的。近期我也会用`Koltin`语言去编写我自己的`Android`项目,也会用`Kotlin`去实现后端用于我`APP`中的接口提供。 145 | 如果你在学习过程中遇到任何的问题,不管你是写`后端`、`Android`以及`前端`的开发者都可以联系我,或者对于`Android`开发很有兴趣。都可以在项目`Issuse`我,或者加入在下的`Koltin`交流群一起学习、研究。 146 | 147 |148 |