-
2020-12-01 22:27:01
1.Kotlin简介
Kotlin是一款由Jetbrains开发的编程语言 2019年五月,Google宣布Kotlin代码为安卓第一官方语言,所以说,Kotlin是一门非常重要的语言,Kotlin之于安卓,就像Swift之于苹果一样,所以,好好学习Kotlin吧。
而这篇文章主要适用对象就是那些有Java基础,但是没有Kotlin的人,虽然说确实是两门语言,但是他们也有很大的互通性,相信这篇文章会让你对Kotlin有一个新的认识。
2.编译工具
IDEA下载或者
3.Kotlin的学习
3.1变量与函数
想想C语言,不就是这样的吗?
#include<stdio.h> int main() { int i; printf("Hello World %d\n",i); }
而Kotlin更简单
fun main() { var i="Hello World" println(i) println("Hello World") }
无非就是变量和函数
但是Kotlin代码 只允许变量声明两种关键字 :val 和var
val value的缩写 声明不可变的变量 eg: val a=10 //a的值是10 不可变 fun main() { val a=10 //a+=10 错误 a是不可变变量 不可重新赋值 } var variable的缩写 声明可变的变量 eg: var a=10 //a的值是10 可变
有人说只有两种类型
方便是方便了,但是我想让a是int类型的整数,而不是字符串,应该怎么办呢?
是的,Kotlin的类型推导机制有时候得到的不是我们想要的答案,那该怎么办呢?
实际上,Kotlin有显式声明变量的方法 而且它的显式声明变量是建立在面向对象数据类型的基础之上的
val a:Int =10 //显式将a声明为Int类型,注意是大写,表明 Int是一个类 //Kotlin抛弃了Java中的基本数据类型,全部使用对象数据类型
下图是Kotlin和Java数据类型对照表
Java数据类型 Kotlin数据类型 数据类型说明 int
Int
整形 long
Long 长整形 short Short 短整型 float Float 单精度浮点型 double Double 长精度浮点型 boolean Boolean 布尔型 char Char 字符型 byte Byte 字节型 而下一步就是fun函数
fun不是戴燕妮Funny的fun 是function的fun
任何一个函数都要用fun来声明 fun是定义函数的关键字
下面是函数的小实例
//两个参数 声明为Int对象类型 fun methodForHH(param1:Int,param2:Int):Int//后面那个Int说明函数的返回类型 { return 0 } //比较两数大小,返回大的 import kotlin.math.max //导包机制 fun methodForHH(param1:Int,param2:Int):Int//后面那个Int说明函数的返回类型 { return max(param1,param2) } //简化代码 import kotlin.math.max //导包机制 fun methodForHH(param1:Int,param2:Int):Int=max(param1,param2) //最简化 fun methodForHH(param1:Int,param2:Int)max(param1,param2)
也许现在看看 简化这一些代码没什么用,但是以后当你成为像HH那样的资深程序员以后作用就大多了
3.2程序的逻辑控制
当我们大一的时候就知道程序的三种结构
if/when选择结构,while/for循环结构,顺序结构 ,其中顺序结构 我觉得已经不用讲了(是吧,逃
所以主要的程序结构就是if/when选择结构,while/for循环结构
相对于Java来说,Kotlin的if选择结构多了返回值,也就是说Kotlin的If是可以返回值的
3.2.1
if结构
实例
fun testFun(num1:Int,num2:Int) { return if(num1>num2){ num1 }else { num2 } }
当然可以继续简化(以后会有用吧
fun testFun(num1:Int,num2:Int) if(num1>num2){ num1 } else { num2 } fun testFun(num1:Int,num2:Int) if(num1>num2) num1 else num2
3.2.2
when结构 when 和if一样也有返回值的
先看你刚刚学习的if结构daima
fun testFun(name:String):Int { return if(name=="HH"){ 10000 }else if(name=="HX"){ 1000 }else{ 0 } }
如果数据量少还好,如果数据量很多呢
这个时候When语句就发挥它的作用啦!
fun testFun(name:String)=when(name) { "HX"->10000 "HH"->100000 else->0 } //这种方法实际上就是匹配值->{执行逻辑写法} //而且Kotlin代码,还可以进行类型匹配 fun checkType(num:Number) { when(num){ is Int -> println("I Love HH") is Double ->println("I Love HX") else ->println("I Love XH") } }
3.2.3循环语句
循环语句也是很简单的,主要是多了几种比较特殊的语法结构吧
相信聪明的你看看也能搞懂
fun main() { for(i in 0..10){ //从0到10闭区间 println(i) } for(i in 0 until 10 step 2){ //从0到10步长是2 println(i) } for(i in 10 downTo 1){ //从10到1降序 println(i) } }
3.3类与对象
java中最重要的就是类和对象 当然 Kotlin也不例外
3.3.1创建一个类
创建一个类这样选择就好
package com.example.buttontest class KotlinTestTemp { var name="" var year=0 fun show(){ println(name+"will love HH For "+year) } }
在Main函数里调用代码
fun main() { val p=KotlinTestTemp() p.name="han" p.year=10000 p.show() }
3.3.2继承与构造函数
Kotlin与Java不同的是Kotlin的类默认是不可以被继承的,而Java的类默认是可以被继承的
当然,让Kotlin里的类可以被继承也很简单,加上open就好了
package com.example.buttontest open class KotlinTestTemp { var name="" var year=0 fun show(){ println(name+"will love HH For "+year) } }
继承类(是不是想起来我们对int数据类型的声明了呢 确实是这样的 var i:Int =10)
class Son:KotlinTestTemp(){ //这对括号涉及到了后面的主构造函数和次构造函数 var sno="" var grade=0 }
//关于主构造函数和次构造函数 我们以后会在Kotlin进阶编程中学习到
3.3.3接口
java中我们已经学过了接口,Kotlin的接口和Java的接口相比 区别不大
我们会在以后对Kotlin的进阶学习中,比较Kotlin接口和父类的区别
//接口 interface HH{ fun Love() fun Dream() } //实现接口的类 class IHH:HH{ override fun Love(){ println("I love HH") } override fun Dream(){ println("When Can I Get") } }
3.3.4数据类和单例类
数据类比较简单,就是一个数据类型
不过java需要重写 构造函数 equal函数 hashCode函数 toString函数
kotlin关于写一个数据类很简答
下面是一个数据类的实现
data class HH(val name:String,val year:Int)
非常简单吧 我们可以在新建一个数据类 打印它
如果你不加data的话 打印结果一不一样呢?
单例模式 无论在Kotlin还是Java中都被经常使用,表示只能有一个这样的对象
相比于Java来说Kotlin的单例模式显得很简答
不需要构造函数和私有方法
只需要object声明就可以了
objetc single{ fun singleTest{ println("I Love HH For 10000年") } }
下面是一个安卓的Activity的单例类
用于管理各种Activity
package com.example.buttontest import android.app.Activity object AcCollector { private val activities=ArrayList<Activity>() fun addActivity(activity:Activity) { activities.add(activity) } fun removeActivity(activity:Activity) { activities.remove(activity) } fun finishAll() { for(activity in activities) { if(!activity.isFinishing) { activity.finish() } } activities.clear() } }
更多相关内容 -
kotlin编程实践
2018-05-08 14:15:30kotlin编程实践中文版 免费 高清带目录 kotlin代码规范 -
kotlin编程指南
2017-09-21 11:01:30kotlin-in-chinesekotlin-in-chinesekotlin-in-chinesekotlin-in-chinesekotlin-in-chinesekotlin-in-chinesekotlin-in-chinese -
揭秘kotlin编程原理
2018-07-24 10:19:37揭秘kotlin编程原理。揭秘kotlin编程原理。揭秘kotlin编程原理。揭秘kotlin编程原理。 -
揭秘 Kotlin 编程原理
2019-04-19 11:08:14揭秘 Kotlin 编程原理 -
kotlin编程语言 中文
2017-05-19 08:53:16kotlin编程语言 中文 -
零基础学Kotlin编程
2019-06-01 17:45:22零基础学Kotlin编程 -
intellij-kotlin:适用于Kotlin编程语言的IntelliJ IDEA插件
2021-03-17 16:44:03Kotlin插件 Kotlin插件是的IntelliJ IDEA插件。 内容 1.设定说明 1.1。 要求 社区或Ultimate,2020.3或更高版本 1.4.21或更高版本 1.2。 克隆所需的存储库 克隆Kotlin IDE插件存储库: git clone ... -
Programming-Kotlin:Packt发行的Kotlin编程代码存储库
2021-05-28 12:00:45编程Kotlin 这是发行的的代码存储库。 它包含从头到尾完成本书所必需的所有支持项目文件。 关于这本书 自2011年由JetBrains开源以来,Kotlin一直在掀起波澜。 它得到了全世界开发人员的好评,并已被公司所采用。 ... -
kotlin:Kotlin编程语言
2021-01-31 11:04:27kotlin:Kotlin编程语言 -
kotlin网站:Kotlin编程语言网站
2021-02-03 09:02:59Kotlin网站 这是的来源。 安装 您将需要Docker运行站点生命周期任务。 适用于和安装。 如果要开发前端,还需要Yarn程序包管理器()。 不要忘记安装前端依赖项yarn install 。 所有特定的应用程序参数都存储在env... -
Kotlin 编程实战
2020-08-04 08:45:00code小生一个专注大前端领域的技术平台公众号回复Android加入安卓技术群导读:Kotlin诞生于2011年,开源于2012年,吸收了Java等语言的优良特性,提供了令人惊艳的编程...code小生 一个专注大前端领域的技术平台
公众号回复
Android
加入安卓技术群导读:Kotlin诞生于2011年,开源于2012年,吸收了Java等语言的优良特性,提供了令人惊艳的编程体验,是编程语言界名副其实的“后浪”。
欢迎来到Kotlin的世界!
Kotlin是2011年由JetBrains推出的新一代编程语言。最初基于JVM,如今已向Native、JavaScript、数据科学等多个领域迈进。Kotlin是一种广泛的通用语言。你可以在任何原先使用Java的地方以及其他更多场景中使用它。
根据2020年2月JVM Ecosystem的数据,在JVM上Kotlin的份额已经仅次于Java,位居第二。2017年Google官方宣布Kotlin为Android的开发语言后,Kotlin的发展势头更为迅速,已成为编程语言界的又一颗新星,在业界得到了广泛的关注。
如今Kotlin已经足够成熟,众多Android开发者迫切需要一本入门级的Kotlin编程书籍,以顺利从Java过渡到Kotlin。
《Kotlin编程实践》一书通俗易懂,作者从向你展示如何安装Kotlin以及为你的项目配置它讲起,教会你如何在Java环境、浏览器中或作为一个独立的应用程序来运行Kotlin。用大量简单的示例程序清晰地解释了Kotlin的语法、数据结构、函数式编程等主要特性,是对Kotlin初学者非常有帮助的一本工具书。
Kotlin的版本迭代非常迅速,相关的书籍、文章和教程很容易就会被打上“过时”的标记。本书基于Kotlin持续时间长、语法特性非常成熟的1.3版本编写,除了版本够新之外,内容的组织方式也非常讲究,采用了抛出问题、回答问题的方式,既适合新手入门通读,也适合老手作为资料重点翻阅。相比之下,本书对初学者更为友好,负责翻译本书的禹昂更是Kotlin中文官网的主要翻译贡献者之一,所有的概念和术语都完全依照中文官网的翻译标准进行推敲,相信大家的阅读体验会如同查阅中文官网一般。
本书将带给你直接而实用的帮助,可以指导你在Kotlin旅途中快速进步。本书是Kotlin必不可少的操作指南,每个开发者都应将其放在案头,以支持日常工作。
主要内容
本书分为13章,每一章都是独立的,但本书引用了许多其他资料。你可以按任意喜欢的顺序阅读本书。
第1章讲解了安装并运行Kotlin的基本过程,包括使用REPL,使用诸如Maven以及Gradle等构建工具,以及在Graal中使用原生镜像生成器。
第2章讲解了Kotlin的基本特性—例如可空类型、操作符重载以及类型转换,然后介绍了一些更深奥的问题,包括按位移位操作符或者在Pair类上编写扩展函数等。
第3章重点介绍了Kotlin的面向对象特性,而该部分内容可能会让其他语言的开发者对此感到惊讶或不明所以。它包含如何使用const关键字、Kotlin如何处理幕后属性、延迟初始化以及令人恐惧的Nothing类,这些内容一定会令现有的Java开发者感到困惑。
第4章只有很少的一部分内容,其中涵盖一些需要被解释说明的函数式特性。函数式编程概念会始终贯穿全书,特别是当我们谈论集合、序列以及协程时,但该章中包含的一些有用的技巧可能会让你感觉到不同寻常或非常有趣。
第5章介绍了数组与集合,主要介绍一些不那么为人所知的方法,例如集合解构、按多个属性排序、在集合上构建窗口,以及创建数列。
第6章展示了Kotlin如何惰性处理序列中的元素,类似于在Java中使用流的方式,内容包含生成序列、在序列中生产元素以及使用无限序列。
第7章涵盖了Kotlin独有的另一个主题:在对象的上下文中执行代码块的函数。诸如let、apply以及also这类函数在Kotlin中非常有用,该章会说明为什么以及如何使用它们。
第8章讨论了Kotlin中的一个便捷特性:如何实现委托。委托可以让你使用组合而不是继承,Kotlin的标准库包含了一系列的委托,例如lazy、observable以及vetoable。
第9章涵盖了有关测试的重要主题,将会重点关注JUnit5。在当前版本下,JUnit已经被设计为可以与Kotlin良好地配合使用,其中包括常规用法以及在Spring框架应用程序中使用。该章会讨论使编写与执行测试更加容易的几种方式。
第10章涵盖了一些专门用于资源管理的方法,包括文件I/O,以及在多种情况下具有广泛适用性的use函数。
第11章介绍了其他类别的书中不容易找到的主题。诸如如何获取当前Kotlin版本,如何强制when语句在即使没有返回值的时候也要覆盖所有情况,以及如何在正则表达式中使用replace函数。此外,也讨论了TODO函数和Random类,以及如何与Java异常处理集成。
第12章涉及对Kotlin非常友好的Spring框架与Spring Boot,少量内容展示了如何将Kotlin类作为托管的bean、如何实现JPA持久性,以及如何在需要的时候进行依赖注入。
第13章介绍协程。协程是Kotlin中最受欢迎的功能之一,也是这门语言并发与并行编程的基础,内容包含基础知识,例如构建器与调度器、如何取消与调试协程,以及如何在自定义的Java线程池中运行它们。
这13章的内容不需要按特定顺序阅读。它们相辅相成,你可以从任何地方开始阅读。章节分组提供了一种将相似内容放在一起的方式,但是我们还是希望你可以在各章节之间自由跳跃从而解决你当前可能遇到的任何问题。
通过阅读本书,你将:
掌握函数式编程概念,包括 lambda 表达式、序列和并发。
学习如何使用委托、延迟初始化和作用域函数。
学习 Kotlin 与 Java 互操作的能力并使用 Kotlin 访问Java 库。
能够编写扩展函数。
能够使用诸如 JUnit5 之类的实用库。
在特定的开发框架(例如 Android 和 Spring)内获得实践经验。
作者简介
Ken Kousen是Java Champion、Oracle Groundbreaker Ambassador与JavaOne Rock Star三个奖项的获得者。Ken在他自己的公司 Kousen IT开发软件并教授软件开发课程。同时也是JetBrains官方认证的Kotlin培训合作伙伴。
译者简介
乔禹昂,携程机票移动端高级工程师,长期在工作中将 Kotlin 用于实践,Kotlin界的优秀“后浪”。Kotlin 中文社区成员,官方文档译者。主要负责翻译协程、Native 部分的多篇官方文档,曾担任北京 GDG/Kotlin Everywhere 大会讲师,分享了《Kotlin 函数式编程》的主题。对 Kotlin Native、Kotlin Multiplaform 等实验性新技术也颇有研究。
目录
●第1章 安装并运行Kotlin11
1.1 在没有本地编译器的情况下运行Kotlin11
1.2 在本地安装Kotlin13
1.3 在命令行中编译并运行Kotlin15
1.4 使用Kotlin REPL16
1.5 执行Kotlin脚本17
1.6 使用GraalVM构建独立应用程序18
1.7 为Gradle添加Kotlin插件(Groovy语法)21
1.8 为Gradle添加Kotlin插件(Kotlin语法)24
1.9 使用Gradle构建Kotlin工程26
1.10 使用Maven编译Kotlin27
●第2章 Kotlin基础31
2.1 在Kotlin中使用可空类型31
2.2 在Java中添加可空指示器34
2.3 为Java添加重载方法36
2.4 显式类型转换40
2.5 打印不同的进制42
2.6 数幂44
2.7 使用移位运算符46
2.8 使用位布尔运算符49
2.9 使用to函数创建Pair实例52
●第3章 Kotlin中的面向对象编程55
3.1 理解const与val的不同之处55
3.2 创建自定义的getter与setter56
3.3 定义数据类59
3.4 幕后属性技术62
3.5 操作符重载65
3.6 使用lateinit进行延迟初始化67
3.7 使用安全转换函数、恒等操作符,以及Elvis操作符覆盖equals函数70
3.8 创建单例72
3.9 无事生非75
●第4章 函数式编程79
4.1 在算法中使用fold79
4.2 使用reduce函数进行归约82
4.3 使用尾递归84
●第5章 集合89
5.1 使用数组89
5.2 创建集合92
5.3 为已存在的集合创建只读视图94
5.4 从集合构建map96
5.5 当集合为空的时候返回默认值97
5.6 将变量限制在给定区间98
5.7 处理集合中的窗口100
5.8 解构list102
5.9 将多个属性排序103
5.10 自定义迭代器105
5.11 根据类型过滤集合107
5.12 在数列中创建区间108
●第6章 序列113
6.1 使用懒序列113
6.2 生成序列115
6.3 管理无限序列117
6.4 以固定间隔从序列生成元素119
●第7章 作用域函数123
7.1 使用apply函数在构造结束之后初始化对象123
7.2 使用also函数进行其他操作124
7.3 使用let函数与Elvis126
7.4 使用let函数代替临时变量128
●第8章 Kotlin委托131
8.1 使用委托实现组合131
8.2 使用lazy委托134
8.3 确保值不为空136
8.4 使用observable与vetoable委托137
8.5 使用映射作为委托141
8.6 创建你自己的委托143
●第9章 测试147
9.1 设置测试类的生命周期147
9.2 使用数据类进行测试152
9.3 使用帮助函数并使用默认参数154
9.4 使用不同的参数重复JUnit 5的测试156
9.5 使用数据类进行参数化测试159
●第10章 输入/输出161
10.1 使用use函数管理资源161
10.2 写文件164
●第11章 其他167
11.1 在代码中获取Kotlin版本号167
11.2 重复执行lambda表达式169
11.3 强制when语句进行穷举170
11.4 在正则表达式中使用replace函数172
11.5 转换为二进制字符串并返回174
11.6 使一个类可执行176
11.7 测量经过时间179
11.8 启动线程180
11.9 使用TODO强制完成183
11.10 理解Random的随机行为185
11.11 在函数命名中使用特殊字符187
11.12 告知Java处理异常188
●第12章 Spring框架191
12.1 开放用于继承的Spring管理的bean类191
12.2 持久化Kotlin数据类194
12.3 依赖注入196
●第13章 协程与结构化并发201
13.1 选择协程构建器201
13.2 使用withContext替换async/await207
13.3 使用协程调度器208
13.4 在Java线程池上运行协程210
13.5 取消协程213
13.6 协程调试216
上下滑动查看
本书没有专门针对Android的章节,相反,将全面讨论Kotlin在Android中的应用。一些与Android有关的特定内容(例如协程的取消),利用了Android库广泛使用Kotlin的事实,但一般来说,本书涵盖的语言特性可以在任何地方使用。本书希望以一种更通用的方式覆盖这门语言,使Android开发者能学到在开发任何项目时都有用的技巧。
直接入手
赠书福利
感谢机械工业张老师赠书《kotlin编程实战》5本,自己留一本,剩下 4 本赠送给大家。
参与方式
给本文一个双击:赞+在看
关注下面我的公众号
回复编程实战(建议复制)
????长按上方二维码 2 秒
回复「编程实战」
为避免输错,建议复制
???? 点击抢先预览
-
kotlin-power-assert:Kotlin编译器插件,用于启用Kotlin编程语言中的图解断言
2021-02-03 23:04:36kotlin-power-assert:Kotlin编译器插件,用于启用Kotlin编程语言中的图解断言 -
KotlinTutorials:这是一个包含有关Kotlin编程语言的课程和示例的项目。
2021-05-26 09:24:03这个项目包含有关Kotlin编程基础的各种信息和示例。 项目主题 类型转换 如果表达 if..else..if表达式 如果表达式嵌套 当表达 while循环 做...而循环 循环 数组 范围 空安全 休息 继续 职能 功能重载 多种功能 顶级... -
Kotlin 编程三分钟入门
2020-08-30 12:11:36一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写... -
learning-kotlin:学习Kotlin编程语言以进行Android开发
2021-03-13 01:02:06学习KotlinKotlin编译器的Git回购,用于从命令行运行Kotlin脚本从命令行(WINDOWS)执行任何kotlin脚本: kotlinc .\HelloWorld.kt -include-runtime -d .\output\HelloWorld.jar -
kotlin,kotlin编程语言.zip
2019-10-13 07:03:33欢迎来到科特林!一些方便的链接: -
kotlin, Kotlin编程语言.zip
2019-10-12 07:09:09kotlin, Kotlin编程语言 Kotlin编程语言欢迎使用 Kotlin ! 一些方便的链接:Kotlin站点获得开始指南尝试 KotlinKotlin标准库插件问题跟踪程序论坛Kotlin博客在 Twitter 跟踪 Ko -
kotlin-web-site, Kotlin编程语言网站.zip
2019-10-12 05:15:14kotlin-web-site, Kotlin编程语言网站 这是 Kotlin网站的源代码。文件 Bug安装工具与网站管理员一起工作。运行失败数据模板页元数据页写入内容内容归档 Bug我们在 Bug 报告和建议中使用 YouTrack 。 点击这里报告... -
Android_第一行代码笔记:第二章 入门Kotlin编程
2022-05-01 16:35:35android_第一行代码:Kotlin学习笔记Kotlin
一、Kotlin简介
2011年,JetBrains发布了Kotlin的第一个版本,并在2012年将其开源。 2016年Kotlin发布了1.0正式版,代表着Kotlin语言已经足够成熟和稳定了,并且JetBrains也在自家的旗舰IDE开发工具IntelliJ IDEA中加入了Kotlin的支持。 2017年Google宣布Kotlin正式成为Android开发一级语言,并且Android Studio也加入了对Kotlin的支持。 2019年Google正式宣布了Kotlin First,未来提供的官方API也将会以Kotlin版本为主
Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。相较于Java语言,Kotlin 程序文件以 .kt 结尾,如:hello.kt 、app.kt。1.Kotlin相比于Java的优势
语法更加简洁: 大大减少样板代码的数量,使用Kotlin开发的代码量可能会比使用Java开发的减少50%甚至更多。 语法更加高级,相比于Java比较老旧的语法,Kotlin增加了很多现代高级语言的语法特性,使得开发效率大大提升。 语言更加安全: Kotlin几乎杜绝了空指针这个全球崩溃率最高的异常。
和Java是100%兼容的,Kotlin可以直接调用使用Java编写的代码,也可以无缝使用Java第三方的开源库。这使得Kotlin在加入了诸多新特性的同时,还继承了Java的全部财富。
2.Kotlin的工作原理
Kotlin可以做到和Java 100%兼容,这主要是得益于Java虚拟机的工作机制。
其实Java虚拟机并不会直接和你编写的Java代码打交道,而是和编译之后生成的class文件打交道。 而Kotlin也有一个自己的编译器,它可以将Kotlin代码也编译成同样规格的class文件。 Java虚拟机不会关心class文件是从Java编译来的,还是从Kotlin编译来的,只要是符合规格的class文件,它都能识别。 也正是这个原因,JetBrains才能以一个第三方公司的身份设计出一门用来开发Android应用程序的编程语言。
二、运行Kotlin代码的三种方式
1.IntelliJ IDEA
此应用对Kotlin支持的非常好,直接创建Kotlin项目就可以独立运行代码!
优点:官方工具,支持性非常好
缺点:需要安装IDE工具2.在线运行网站 https://play.kotlinlang.org/
3.Android Studio
在任意Android工程中创建一个Kotlin文件,并编写一个main()函数,即可运行main()函数中的Kotlin代码。
三、Kotlin基本语法
1.变量
1.1 定义变量:只允许在变量前声明两种关键字,val与var。
val(value简写):声明一个不可变的变量, 这种变量在初始赋值之后就再也不能重新赋值,对应Java中的final变量。 var(variable简写):声明一个可变的变量, 这种变量在初始赋值之后仍然可以再被重新赋值复制,对应Java中的非final变量。
且每一行代码结尾是不用加分号的
1.2 kotlin类型推导机制
上例中,我们使用val关键字定义变量a并赋值,这里a就会被赋值自动推导成整型变量,而把一个字符串赋值给a的话,那么a就会被自动推导成字符串变量。
1.3 Java与Kotlin数据类型对照表
2.函数
函数是运行代码的载体,方法与函数就是同一个概念,都翻译自function,只是不同语言的叫法习惯不同,Java中方法叫法更普遍而Kotlin中函数叫法更普遍一些。
2.1 定义函数的语法规则
fun methodName(param1: Int, param2: Int): Int { return 0 }
fun(function的简写)是定义函数的关键字,无论你定义什么函数,都一定要使用fun来声明。 紧跟在fun后面的是函数名,良好的编程习惯是函数名最好要有一定的意义,能表达这个函数的作用是什么。 函数名后面的一对括号中,可以声明该函数接收什么参数,以参数名称: 参数类型形式书写 括号后面的部分是可选的,用于声明该函数会返回什么类型的数据。如果不需要返回任何数据,这部分可以不写。 两个大括号之间的内容就是函数体了,可以在这里编写函数的具体逻辑。
2.2 单行代码函数的语法糖
当一个函数的函数体中只有一行代码时,可以使用单行代码函数的语法糖:
fun methodName(param1: Int, param2: Int) = 0
使用这种写法,可以直接将唯一的一行代码写在函数定义的尾部,中间用等号连接即可。 return关键字也可以省略,等号足以表达返回值的意思。 Kotlin还拥有出色的类型推导机制,可以自动推导出返回值的类型。
3.逻辑控制
3.1 if条件语句
Kotlin中的if语句相比于Java有一个额外的功能:它是可以有返回值的,返回值就是if语句每一个条件中最后一行代码的返回值。
fun largerNumber(num1: Int, num2: Int): Int { val value = if (num1 > num2) { num1 } else { num2 } return value }
仔细观察上述代码,你会发现value其实是一个多余的变量,我们可以直接将if语句返回,这样代码将会变得更加精简,如下所示:
fun largerNumber(num1: Int, num2: Int): Int { return if (num1 > num2) { num1 } else { num2 } }
当一个函数只有一行代码时,可以省略函数体部分,直接将这一行代码使用等号串连在函数定义的尾部。虽然largerNumber()函数不止只有一行代码,但是它和只有一行代码的作用是相同的,只是return了一下if语句的返回值而已,符合该语法糖的使用条件。那么我们就可以将代码进一步精简:
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) { num1 } else { num2 }
最后,还可以将上述代码再精简一下,直接压缩成一行代码:
fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
3.2 when条件语句
3.2.1 精确匹配
当需要判断的条件非常多的时候,可以考虑使用when语句来替代if语句(类似Java的switch)。例如获取学生考试分数:
fun getScore(name: String) = if (name == "Tom") { 86 } else if (name == "Jim") { 77 } else if (name == "Jack") { 95 } else if (name == "Lily") { 100 } else { 0 } fun getScore(name: String) = when (name) { "Tom" -> 86 "Jim" -> 77 "Jack" -> 95 "Lily" -> 100 else -> 0 }
3.2.2 类型匹配
除了精确匹配之外,when语句还允许进行类型匹配,is关键字就是类型匹配的核心(类似Java中的instanceof)
fun checkNumber(num: Number) { when (num) { is Int -> println("number is Int") is Double -> println("number is Double") else -> println("number not support") } }
1.带参数when
fun getScore(name: String) = when (name) { "Tom" -> 86 "Jim" -> 77 "Jack" -> 95 "Lily" -> 100 else -> 0 }
2.不带参数when(假设名字以Tom开头的人分数都是86分的场景下)
fun getScore(name: String) = when { name.startsWith("Tom") -> 86 name == "Jim" -> 77 name == "Jack" -> 95 name == "Lily" -> 100 else -> 0 }
3.3 while循环语句
与Java中while类似
3.4 for-in循环语句
3.4.1 区间
闭区间:表示[0,10]范围的区间,且两端是闭区间(…是创建两端闭区间的关键字)
val range = 0..10 fun main() { for (i in 0..10) { println(i) } }
左闭右开区间:表示[0,10)范围的区间,其中step 2表示区间范围内递增2相当于i = i + 2,且左端是闭区间右端是开区间(until是创建左闭右开区间的关键字)
val range = 0 until 10 fun main() { for (i in 0 until 10 step 2) { println(i) } }
降序区间:表示[10,1]范围的区间(downTo是创建降序区间的关键字)
fun main() { for (i in 10 downTo 1) { println(i) } }
for-in循环不仅可以对区间进行遍历,还可用于遍历数组与集合。除此之外,特殊场景无法使用for-in实现的话可以改用while循环去实现。
4.面向对象编程
面向对象的语言是可以创建类的,类就是对事务的一种封装,比如说人、汽车、房屋、书等任何事物,我们都可将它封装为一个类,类名通常是名词。而类中又可以拥有自己的字段(表示该类所拥有的属性例如人的姓名年龄、汽车的品牌价格等,字段名通常也为名词)和函数(表示该类可以有哪些行为例如人可以吃饭睡觉、汽车可以驾驶和保养等,函数名通常为动词)
4.1 类与对象
可以使用如下代码定义一个类,以及声明它所拥有的字段和函数:
class Person { var name = "" var age = 0 fun eat() { println(name + " is eating. He is " + age + " years old.") } } // main()中进行实例化,且与Java中实例化类似 // 但Kotlin去掉了Java的new关键字 val p = Person()
然后使用如下代码创建对象,并对对象进行操作:
fun main() { val p = Person() p.name = "Jack" p.age = 19 p.eat() }
面向对象编程基本用法:
1.先将事务封装成为具体的类;
2.将事务所拥有的属性和能力分别定义成类中的字段和函数;
3.对类进行实例化;
4.根据编程需求调用类中字段与方法;4.2 继承与多态
Kotlin中所有非抽象类默认都是不可被继承的,抽象类本身无法创建实例,一定要由子类去继承它才能创建实例,因此抽象类必须可以被继承才行,否则无意义。
4.2.1 继承:open与冒号关键字
一个类默认是不可以被继承的,如果想要让一个类可以被继承,需要主动声明open关键字:
open class Person { … }
要让另一个类去继承Person类,则需要使用冒号关键字:
class Student : Person() { var sno = "" var grade = 0 }
现在Student类中就自动拥有了Person类中的字段和函数,还可以定义自己独有的字段和函数。
注意:Person类后的括号涉及到主构造函数、次构造函数等方面的知识。4.2.2 主、次构造函数
主构造函数: 最常用的构造函数 每个类都默认会有一个不带参数的主构造函数,也可以显式指明参数 没有函数体,直接定义在类名的后面即可
例如,我们直接将学号与年级字段放入主构造函数中,则在Student实例化时必须传入构造函数中所要求的所有参数:
class Student(val sno: String, val grade: Int) : Person() { var sno = "" var grade = 0 } // main() val student = Student("a123", 5)
但是,主构造函数没有函数体,我们想要在其中编写一些逻辑该怎么办?Kotlin提供了init结构体:
class Student(val sno: String, val grade: Int) : Person() { init { println("sno is " + sno) println("grade is " + grade) } }
根据子类的构造函数必须调用父类的构造函数这一继承规则,但主构造函数并没有函数体该如何去调用父类构造函数,我们可以在init结构体中类似Java中super.xxx()调用但是不推荐,这时我们就可以在继承时通过其后的括号来指定:
// Student类的主构造函数初始化会调用Person类的无参构造函数,无参数括号也不可省略! class Student(val sno: String, val grade: Int) : Person() { init { println("sno is " + sno) println("grade is " + grade) } }
如果我们改变一下Person类,那么我们的括号后指定的无参构造函数也需要变为有参的构造函数(Person无参构造消失,变为有参构造):
open class Person(val name: String, val age: Int) { … } // Student类 class Student(val sno: String, val grade: Int) : Person(name, age) { … } // Main() val student = Student("a123", 5,"Jack", 19)
任何类只能有一个主构造函数但可以有多个次构造函数
次构造函数: 也可以用来实例化一个类 有函数体 通过constructor关键字定义
Kotlin规定,当一个类既有主构造函数又有次构造函数时,所有的次构造函数必须调用主构造函数(包括间接调用)例如:
// Student类 class Student(val sno: String, val grade: Int) : Person(name, age) { constructor(name: String, age: Int) : this("", 0, name, age) { } constructor() : this("", 0) { } }
4.3 接口
Kotlin中定义接口的关键字和Java中是相同的,都是使用的interface:
interface Study { fun readBooks() fun doHomework() }
而Kotlin中实现接口的关键字变量了冒号,和继承使用的是同样的关键字:
class Student(val name: String, val age: Int) : Study { override fun readBooks() { println(name + " is reading.") } override fun doHomework() { println(name + " is doing homework.") } }
4.4 数据类
Kotlin中使用data关键字可以定义一个数据类:
data class Cellphone(val brand: String, val price: Double)
Kotlin会根据数据类的主构造函数中的参数将equals()、hashCode()、toString()等固定且无实际逻辑意义的方法自动生成,从而大大简少了开发的工作量。
4.5 单例类
Kotlin中使用object关键字可以定义一个单例类:
object Singleton { fun singletonTest() { println("singletonTest is called.") } }
而调用单例类中的函数比较类似于Java中静态方法的调用方式:
Singleton.singletonTest()
这种写法虽然看上去像是静态方法的调用,但其实Kotlin在背后自动帮我们创建了一个Singleton类的实例,并且保证全局只会存在一个Singleton实例。
5.Lambda编程
5.1 创建集合
5.2 Lambda表达式
5.3 集合的函数式API
5.4 Java函数式API
6.空指针检查
空指针检查
可空类型系统
判空辅助工具
7.Kotlin 中的小魔术
7.1 字符串内嵌表达式
7.2 函数的参数默认值
7.3 字符串内嵌表达式
-
kotlin 编程语言中数据结构和算法 (DSA) 的实现_kotlin_代码_下载
2022-06-10 11:27:20概述 数据结构 数组 哈希表 链表 堆栈 队列 树木 图表 算法 递归 排序 冒泡排序 选择排序 插入排序 合并排序 快速排序 搜索 线性搜索 二进制搜索 BFS DFS 动态规划 记忆 -
chatappjh_kotlin_android:聊天池应用程序Chatappjh的Android版本。 用Kotlin编程
2021-03-11 04:17:09chatappjh_kotlin_android:聊天池应用程序Chatappjh的Android版本。 用Kotlin编程 -
1.1 Kotlin编程环境配置
2020-04-14 16:52:46Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。 Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。 ...目录
一、Kotlin概述:
1、Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言,被称之为 Android 世界的Swift,由 JetBrains 设计开发并开源。
2、Kotlin 可以编译成Java字节码,也可以编译成 JavaScript,方便在没有 JVM 的设备上运行。
3、在Google I/O 2017中,Google 宣布 Kotlin 成为 Android 官方开发语言。
二、IntelliJ IDEA安装
1、下载 Intellij IDEA
官网下载Intellij IDEA http://www.jetbrains.com/idea/,页面打开后单击“DOWNLOAD”
以我的电脑win7 为例,选择对应平台的安装包,此外作为学习我们选择社区版(Community)就可以了,当然不差钱的同学可以选择专业版本。
由于服务器在国外,访问和下载比较慢,耐心等待即可,心急吃不了热豆腐
2、安装Intellij IDEA
安装过程非常简单基本一路火花带闪电的电机下一步或和回车即可,未曾安装过类似软件的小白也可以跟着我的步骤一步一步的操作,争取扫盲。
双击刚才下载的安装包。
出现如下界面电机Next。
更改安装路径,可以按自己喜好更改路径,当然可以按默认设置,我选择安装到D:\Program Files\IntelliJ IDEA
create desktop shortcut根据电脑处理器不同选择安装不同的版本,我电脑是64bit的就勾选64bit;create associations 勾选.java和.kt,同时选择Java文件和kotlin文件,是为了后续需要进行kotlin与java互调(后续学习暂不深究)。
勾选完成后点击Next,出现如下界面。
点击Install正式开始安装程序,途中可以看到安装进度条。此时耐心等待就好。
待进度条达到100%后,点击Next,出现如下界面。勾选Run IntelliJ IDEA ,然后点击finish就安装结束了。
三、环境配置
点击finish后会弹出选择框,提示是否需要导入配置,第一次安装,我们选择不导入设置。
点击Ok,进入UI主题选择界面,可以直接选择skip remaining set default跳过设置。也可以一步一步自定义操作。
Ui主题设置完成后,就代表环境配置结束了。
此节到此结束,下一节我们再写Hello word!!!
-
快速入门Kotlin编程
2020-07-05 19:25:44快速入门Kotlin编程 可能大多数人对Kotlin语言并不是很了解,或者至今还未听说过,但其实它并不是一门很新的语言。 Kotlin是由JetBrains公司开发与设计的 早在2011年,JetBrains就公布了Kotlin的第一个版本 并在2012... -
EmpowerYouth:使用Kotlin编程语言通过MVVM架构赋予Youth App重新设计
2021-03-06 18:49:23EmpowerYouth:使用Kotlin编程语言通过MVVM架构赋予Youth App重新设计 -
Android studio 开发用kotlin编程运行报错Manifest merger failed with multiple errors, see logs
2021-08-20 11:30:24根据《第一行代码》操作,在本站找了许多相似解决方案,但并没有解决我的问题,所以在这里向大家请教一下