编辑推荐
《Kotlin从小白到大牛》作者历时一年,精心编写了适合Kotlin入门者的一本立体化教程。《Kotlin从小白到大牛》是JetBrains公司官方推荐用书!赠送教学课件29章,300个示例源代码,教学视频2500分钟!并提供实时在线答疑服务
内容简介
《Kotlin从小白到大牛》是一部系统论述Kotlin编程语言、面向对象编程方法以及函数式编程思想的立体化教程(含纸质图书、电子书、教学课件、源代码与视频教程)。《Kotlin从小白到大牛》共分为5篇:第1篇Kotlin基础(第1章~第10章),第2篇面向对象(第11章~第13章),第3篇函数式编程(第14章~第17章),第4篇Kotlin进阶(第18章~第27章),第5篇项目实战(第28章~第29章)。主要内容包括:开篇综述;开发环境搭建;个Kotlin程序;Kotlin语法基础;Kotlin编码规范;数据类型;字符串;运算符;程序流程控制;函数;面向对象编程;继承与多态;抽象类与接口;函数式编程基石——高阶函数和Lambda表达式;泛型;数据容器——数组和集合;Kotlin中函数式编程API;异常处理;线程;协程;Kotlin与Java混合编程;KotlinI/O与文件管理;网络编程;Kotlin与JavaSwing图形用户界面编程;轻量级SQL框架——Exposed;反射;注解。最后给出了两个项目设计案例,项目实战1:开发PetStore宠物商店项目;项目实战2:开发Kotlin版QQ2006聊天工具。
为便于读者快速掌握Kotlin编程方法,《Kotlin从小白到大牛》作者精心制作了电子书、完整的教学课件、完整的源代码与丰富的配套视频教程,并提供在线答疑服务。
作者简介
关东升:一个在IT领域摸爬滚打20多年的老程序员、培训师、作者。精通多种IT技术。参与设计和开发北京市公交一卡通大型项目,开发国家农产品追溯系统、金融系统微博等移动客户端项目,并在AppStore发布多款游戏和应用软件。近期为中国移动、中国联通、南方航空、中石油、工商银行、平安银行和天津港务局等企事业单位授课。著有《iOS开发指南》《从零开始学Swift》《Android网络游戏开发实战》《Cocos2d-x实战》系列和《JSP网络程序设计》等40多本计算机书籍。
目录
推荐序1
前言3
配套资源说明6
学习路线图7
内容说明9
第1篇Kotlin基础
本篇视频:454分钟
第1章开篇综述2
本章视频:33分钟
1.1Kotlin语言简介2
1.1.1Kotlin语言历史2
1.1.2Kotlin语言设计目标2
1.2Kotlin语言特点3
1.3Kotlin与Java虚拟机4
1.3.1Java虚拟机4
1.3.2Kotlin应用程序运行过程5
1.4如何获得帮助5
第2章开发环境搭建8
本章视频:25分钟
2.1JDK工具包8
2.1.1JDK下载和安装8
2.1.2设置环境变量10
2.2IntelliJIDEA开发工具12
2.3Eclipse开发工具13
2.3.1Eclipse下载和安装13
2.3.2安装Kotlin插件17
2.4Kotlin编译器18
2.4.1下载Kotlin编译器18
2.4.2设置Kotlin编译器环境变量19
2.5文本编辑工具20
2.5.1在SublimeText中安装Kotlin语言包20
2.5.2SublimeText与Kotlin编译器集成21
第3章第一个Kotlin程序25
本章视频:22分钟
3.1使用REPL实现25
3.2使用IntelliJIDEA实现26
3.2.1创建项目26
3.2.2创建Kotlin源代码文件28
3.2.3编写代码29
3.2.4运行程序30
3.3使用IntelliJIDEA与Gradle实现30
3.4使用Eclipse与Kotlin插件实现33
3.4.1创建项目33
3.4.2创建Kotlin源代码文件34
3.4.3运行程序35
3.5使用文本编辑工具与Kotlin编译器实现37
3.5.1编写代码37
3.5.2编译程序37
3.5.3运行程序39
3.6代码解释39
第4章Kotlin语法基础41
本章视频:52分钟
4.1标识符和关键字41
4.1.1标识符41
4.1.2关键字42
4.2变量和常量43
4.2.1变量43
4.2.2常量和只读变量44
4.2.3使用var还是val45
4.3注释46
4.4语句与表达式47
4.4.1语句48
4.4.2表达式48
4.5包49
4.5.1包的作用49
4.5.2包的定义50
4.5.3包的引入51
第5章Kotlin编码规范53
本章视频:49分钟
5.1命名规范53
5.2注释规范55
5.2.1文件注释55
5.2.2文档注释55
5.2.3代码注释58
5.2.4使用地标注释59
5.3声明60
5.3.1变量或常量声明60
5.3.2类声明61
5.4代码排版62
5.4.1空行62
5.4.2空格64
5.4.3缩进65
5.4.4断行65
5.5省略规范66
第6章数据类型68
本章视频:45分钟
6.1回顾Java数据类型68
6.2Kotlin基本数据类型69
6.2.1整型类型70
6.2.2浮点类型71
6.2.3字符类型72
6.2.4布尔类型74
6.3数值类型之间的转换75
6.3.1赋值与显式转换75
6.3.2数学计算与隐式转换77
6.4可空类型77
6.4.1可空类型概念78
6.4.2使用安全调用运算符(?.)78
6.4.3非空断言运算符(!!)79
6.4.4使用Elvis运算符(?:)80
第7章字符串82
本章视频:93分钟
7.1字符串字面量82
7.1.1普通字符串82
7.1.2原始字符串83
7.2不可变字符串85
7.2.1String85
7.2.2字符串拼接86
7.2.3字符串模板87
7.2.4字符串查找89
7.2.5字符串比较91
7.2.6字符串截取93
7.3可变字符串94
7.3.1StringBuilder94
7.3.2字符串追加、插入、删除和替换95
7.4正则表达式97
7.4.1Regex类97
7.4.2字符串匹配98
7.4.3字符串查找99
7.4.4字符串替换99
7.4.5字符串分割100
第8章运算符102
本章视频:51分钟
8.1算术运算符102
8.1.1一元运算符102
8.1.2二元运算符103
8.1.3算术赋值运算符104
8.2关系运算符105
8.3逻辑运算符107
8.4位运算符108
8.5其他运算符111
8.6运算符优先级111
第9章程序流程控制113
本章视频:47分钟
9.1if分支结构113
9.1.1if结构当作语句使用113
9.1.2if表达式115
9.2when多分支结构117
9.2.1when结构当作语句使用118
9.2.2when表达式119
9.3循环结构121
9.3.1while语句121
9.3.2do-while语句122
9.3.3for语句122
9.4跳转语句124
9.4.1break语句124
9.4.2continue语句126
9.5使用区间128
9.5.1表示区间128
9.5.2使用in和!in关键字129
第10章函数131
本章视频:37分钟
10.1函数声明131
10.2返回特殊数据132
10.2.1无返回数据与Unit类型132
10.2.2永远不会正常返回数据与Nothing类型133
10.3函数参数134
10.3.1使用命名参数调用函数134
10.3.2参数默认值135
10.3.3可变参数136
10.4表达式函数体137
10.5局部函数137
10.6匿名函数138
第2篇面向对象
本篇视频:360分钟
第11章面向对象编程142
本章视频:246分钟
11.1面向对象概述142
11.2面向对象的三个基本特性143
11.2.1封装性143
11.2.2继承性143
11.2.3多态性144
11.3类声明144
精彩书摘
第3章
第一个Kotlin程序
本章视频:22分钟
本章以HelloWorld作为切入点,介绍如何编写和运行Kotlin程序代码。
编写和运行Kotlin程序有多种方式,总的来说有两种:
(1)交互式方式运行;
(2)编译为字节码文件方式运行。
交互式方式运行可以采用REPL。编译为字节码方式运行就是使用IntelliJIDEA或Eclipse创建一个项目,通过这些工具可以编译和运行Kotlin源文件。另外还可以使用文本编辑工具编写Kotlin源文件,再使用Kotlin编译器提供的kotlinc命令在命令提示行中编译Kotlin源程序,然后再通过kotlin命令或JDK提供的java命令运行。
本章介绍如何使用这些工具实现HelloWorld程序。
3.1使用REPL实现
REPL是英文Read-Eval-PrintLoop的缩写,直译为“读取-求值-输出”,它指代一种简单的交互式运行编程环境。REPL对于学习一门新的编程语言有很大的帮助,因为它能立刻对初学者做出回应。许多编程语言都可以使用REPL研究算法以及进行调试。
启动REPL可以通过Kotlin编译器提供的kotlinc命令或在IntelliJIDEA工具中选择Tools→Kotlin→KotlinREPL菜单。打开命令提示行输入kotlinc命令,如图3-1所示。启动REPL,KotlinREPL提供一些前面带有冒号(:)的管理指令,例如“:quit”指令是退出REPL,“:help”指令是帮助。
在REPL窗口中可以输入Kotlin代码,按Enter键后马上会运行并输出结果,测试代码如下:
>>>1+1①
2②
>>>valstr="Hello,world."③
>>>println(str)④
Hello,world.⑤
>>>
“>>>”后面是Kotlin代码,第①行、第③行和第④行都是代码,而第②行、第⑤行是运行结果。
图3-1在命令提示行中启动REPL
3.2使用IntelliJIDEA实现
3.1节介绍了如何以交互式方式编写和运行Kotlin程序代码,交互式方式在很多情况下适合学习Kotlin语言,但是如果要使用Kotlin语言开发实际项目,交互式方式就不适合了。此时,需要创建项目,在项目中创建文件,编译文件,运行文件。
首先介绍如何使用IntelliJIDEA创建Kotlin项目以编写和运行HelloWorld程序。
3.2.1创建项目
首先在IntelliJIDEA中通过项目(Project)管理Kotlin源代码文件,因此需要先创建一个Kotlin项目,然后在项目中创建一个Kotlin源代码文件。
IntelliJIDEA创建项目步骤是:打开IntelliJIDEA的欢迎界面(见图3-2),单击CreateNewProject打开如图3-3所示的对话框。一般第一次启动就可以看到这个界面,如果没有,也可以通过选择菜单File→New→Project命令来打开。
由于要编写的HelloWorld程序属于基于Java虚拟机的Kotlin项目,因此需要创建Kotlin/JVM类型项目,在图3-3中选择Java中的Kotlin/JVM(见图3-4(a))或者选择Kotlin中的Kotlin/JVM(见图3-4(b))都可以创建Kotlin/JVM类型项目。
图3-2IntelliJIDEA欢迎界面
图3-3选择项目类型
(a)选择Java中的Kotlin/JVM(b)选择Kotlin中的Kotlin/JVM
图3-4选择Kotlin/JVM类型项目
这里选择如图3-4(b)所示的界面Kotlin/JVM类型项目,然后单击Next按钮进入如图3-5所示的界面。在Projectname中输入项目名,本例中是项目ch3.2,Projectlocation中选择保存项目路径,选择合适的ProjectSDK后,单击Finish按钮创建项目,如图3-6所示。
图3-5输入项目命名
图3-6项目创建完成
3.2.2创建Kotlin源代码文件
项目创建完成后,需要创建一个Kotlin源代码文件执行控制台输出操作。选择刚刚创建的项目,选中src文件夹,然后选择菜单File→New→KotlinFile/Class,打开新建Kotlin文件或类对话框,如图3-7所示,在对话框中的Name文本框中输入HelloWorld,Kind(类型)下拉框中选择File(文件),然后单击OK按钮创建文件。如图3-8所示,在左边的项目文件管理窗口中可以看到刚刚创建的HelloWorld.kt源代码文件。
图3-7 新建Kotlin文件或类
图3-8 HelloWorld.kt源代码文件
3.2.3编写代码
要想让Kotlin源代码文件能够运行起来,需要使用main函数。main函数是程序的入口,它与C++语言中的main函数类似,都不属于任何的类,称为顶层函数(top-levelfunction)。但是与Java不同,Java中程序的入口也是main函数,但Java中所有的函数都必须在某个类中定义,main函数也不例外。
编写代码如下:
funmain(args:Array){
println("Hello,world!")
}
如果是Java,实现同样功能的代码如下:
publicclassHelloWorld{
publicstaticvoidmain(String[]args){
System.out.print("Hello,world!");
}
}
3.2.4运行程序
程序编写完成就可以运行了。如果是第一次运行,则需要右击左边的项目文件管理窗口中的HelloWorld.kt文件,在弹出的菜单中选择Run'HelloWorldKt'运行,运行结果如图3-9所示,在左下面的控制台窗口输出“Hello,world!”字符串。
图3-9运行结果
注意
如果已经运行过一次,也可直接单击工具栏中的Run按钮,或选择菜单Run→Run'HelloWorldKt',或使用快捷键Ctrl+F10,就可以运行上次的程序。
……
前言/序言
前言
2017年5月19日的GoogleI/O大会上,谷歌公司宣布将Kotlin语言作为Android应用开发一级语言。国内很快掀起了学习Kotlin的热潮,就像2014年苹果公司发布Swift语言一样,一夜之间出现了很多团队翻译官方文档、录制视频课程。听说了这个消息我非常激动,也想写一本Kotlin立体图书,包括电子书、配套视频、课件和答疑服务。经过了6个多月的专注写作和实践终成此书,6个月来放弃很多对家人的陪伴,感谢她们的理解和宽容。
由于工作的原因,我在2015年就接触到Kotlin语言,被它的简洁理念深深吸引。我将以前用Java编写的QQ聊天工具用Kotlin语言重新编写,代码减少了30%。Kotlin语言的设计者们设计这门语言的目的是取代Java。诞生了20多年的Java虽然还是排名第一的语言,但仍被人诟病,现在从如下几个方面讨论一下。
1.对函数式编程的支持
Java对函数式编程的支持不够及时和彻底,直到Java8才开始支持函数式编程,但Java8中并不支持函数类型,不能定义高阶函数;而Kotlin支持函数式编程。试比较以下代码:
//Java面向对象代码片段
StringuserId=(String)jsonObj.get
("user_id");
//从clientList集合中删除用户
for(ClientInfoinfo:clientList){
if(info.getUserId().equals
(userId)){
clientList.remove(info);
break;
}
}
//Kotlin函数式编程代码片段
valuserId=jsonObject["user_id"]asString
valclientInfo=clientList.first{
it.userId==userId
}
//从clientList集合中删除用户
clientList.remove(clientInfo)
从上述代码比较可见,函数式编程中不再需要那些for和if等流程控制语句,对于数据的处理更加简洁。函数式编程并不能完全取代面向对象编程,函数式编程擅长进行数据处理,如核心业务逻辑、算法实现等;而面向对象编程擅长构建UI界面编程、搭建系统架构等。
2.异常处理的理念
Java把异常分为受检查异常和运行期异常,编译器强制要求必须捕获或抛出受检查异常。经过多年的实践,开发者发现即便是捕获了那些受检查异常,处理起来也力不从心。受检查异常会使得程序结构变得混乱,代码大量增加。而Kotlin把所有的异常都看作是运行期异常,编译器不会强制要求捕获或抛出任何异常,开发人员可以酌情考虑是否捕获和处理异常。
下面再比较一些代码:
//Java文件复制代码片段
try(FileInputStreamfis=new
FileInputStream("./TestDir/src.zip");
BufferedInputStreambis=new
BufferedInputStream(fis);
FileOutputStreamfos=new
FileOutputStream("./TestDir/
subDir/src.zip");
BufferedOutputStreambos=new
BufferedOutputStream(fos)){
//准备一个缓冲区
byte[]buffer=newbyte[1024];
//首先读取一次
intlen=bis.read(buffer);
while(len!=-1){
//开始写入数据
bos.write(buffer,0,len);
//再读取一次
len=bis.read(buffer);
}
}catch(FileNotFoundExceptione){
e.printStackTrace();
}catch(IOExceptione){
e.printStackTrace();
}
//Kotlin函数式编程代码片段
FileInputStream("./TestDir/src.zip")
.use{fis->
FileOutputStream("./TestDir/subDir/
src.zip").use{fos->
//复制到输出流
fis.buffered().copyTo
(fos.buffered())
println("复制完成")
}
}
上述代码实现了文件复制,Java代码需要21行,而Kotlin代码只需要7行。
3.对可空类型的支持
空指针异常是Java最令人头痛的问题之一。Java数据类型可以接收空值;而Kotlin数据类型默认不能接收空值,是非空数据类型,这样就保证了数据类型的安全,防止空指针异常的发生。
这里只是比较了Java和Kotlin几个最突出的区别,更多的不同和细微的差别还需要读者阅读此书,并自己编写其中的每一个示例,感受Kotlin与Java的不同,感受Kotlin的简洁。
《Kotlin从小白到大牛》服务网址
为了更好地为广大读者提供服务,《Kotlin从小白到大牛》建立了一个服务网址www.zhijieketang/group/6,希望读者对书中内容发表评论,提出宝贵意见。
源代码
书中包括了200多个完整的案例项目源代码,读者可以到《Kotlin从小白到大牛》网站www.zhijieketang/group/6免费注册下载。
勘误与支持
网站www.zhijieketang/group/6中建立了一个勘误专区,可以及时地把书中的问题、失误和勘误反馈给广大读者。如果读者发现了任何问题,均可以在网上留言,也可以发送电子邮件到eorient@sina.com,也可以通过作者的新浪微博(@tony_关东升)或微信(q270258799)联系作者与编辑。
致谢
《Kotlin从小白到大牛》主要由关东升著。此外,智捷课堂团队的赵志荣、赵大羽、关锦华、闫婷娇、王馨然、关秀华、刘佳笑和赵浩丞参与了部分内容的编写。感谢清华大学出版社的盛东亮编辑给《Kotlin从小白到大牛》提供的宝贵意见。感谢赵浩丞手绘了书中全部草图,并从专业的角度修改书中图片,力求更加真实完美地奉献给广大读者。感谢我的家人容忍我的忙碌以及对我的关心和照顾,使我能抽出这么多时间,投入全部精力,专心编写此书。
由于时间仓促,书中难免存在不妥之处,请读者原谅,并提出宝贵意见。
关东升
2018年6月