关键词:
Kotlin
本Blog是我学习《Android第一行代码-第三版》
的学习笔记,将会不定期断更持续更新。(默认大家都和我一样学过C++或Java的基础语法)。
Kotlin简介
在Android诞生的前几年中,Java一直是Android的主要开发语言。在2017年,Google在I/O大会上宣布,Kotlin正式成为Android的一级开发语言,与Java平起平坐,同时Android Studio也对Kotlin进行了全面的支持。
2019年,Google在I/O大会上宣布,Kotlin已成为Android的第一开发语言
,Java虽然可以继续使用,但是Google更推荐开发者使用Kotlin编写Android应用程序,并且未来提供的官方API也会优先考虑Kotlin版本。
Kotlin语言的优点
- Kotlin语法更加简洁。对同样的功能,Kotlin开发的代码量可能会比Java开发的减少50%甚至更多。
- Kotlin语法更加高级。相比于Java较为老旧的语法,Kotlin增加了许多现代高级语言的语法特性,大大提高了开发效率。
- Kotlin在语言安全性方面下了很多功夫。几乎杜绝了空指针这个全球崩溃率最高的异常。
- Kotlin与Java语言100%兼容。Kotlin可以直接调用使用Java编写的代码,也可以无缝使用Java的第三方开源库。因为Java和Kotlin编译后都生成
.class
文件,然后由Java虚拟机进行识别运行。
如何运行Kotlin代码
- 使用IDEA。IDEAyyds。
- 在线运行Kotlin代码。JetBrains同样提供了在线运行Kotlin代码的网站。
- 使用Android Studio。Android Studio不能单独创建Kotlin项目,只能创建Android项目,然后在项目中编写一个Kotlin的main()函数这样就可以独立运行Kotlin代码了。
Kotlin语法
细节
- Kotlin每一行代码的结尾是
不用加分号
的。
变量
在Kotlin中定义一个变量,只允许在变量前声明两种关键字:val
(value)和var
(variable)。
val
: 声明一种不可变
的变量,这种变量在初始赋值之后便不能再重新赋值,对应Java中的final变量。
var
:声明一个可变
的变量,这种变量在初始赋值之后仍可以再被重新赋值,对应Java中的非final变量。
那么就有一个疑问了,这个声明只说了该变量是可变的还是不可变的,如果知道它的数据类型呢?这就是Kotlin比较有特色的一点了,它有出色的类型推导机制(这点感觉和python有点像)。你第一次给它赋的值就是这个变量的数据类型。
假如写一个函数:
fun main()
val a = 10
println("a = " + a)
val b = "abc"
println("b = " + b)
但是自动推导类型只有在初始时就赋值的情况下才会进行,如果刚开始只是声明不赋值的话,这么写就会报错。
// 错误示范
fun main()
val a
a = 10
println("a = " + a)
这时我们就需要显式地声明a的数据类型。
// 正确示范
fun main()
val a : Int
a = 10
println("a = " + a)
如果和学过Java的话就会发现,Java的变量名都是首字母小写的,例如:int
,double
,boolean
,char
,但是Kotlin中的变量首字母却都是大写的,例如Int
,Double
,Boolean
,Char
等等。这意味着Kotlin已经完全抛弃了Java的基本数据类型,全部使用了对象数据类型(类似于Java的String),在Java中的int
是关键字,而在Kotlin中Int
变成了一个类,它拥有自己的方法和继承结构。
原则上我们优先使用val
来声明一个变量,而当val
无法满足需求时再使用var
,这样写出来的程序会更加健壮,更加高质量。
函数
函数是用来运行代码的载体,当调用这个函数时,这个函数里面的代码都会运行,main()
函数就是程序入口函数。
Kotlin同样允许自定义函数,语法规则如下:
fun methodName(param1 : Int,param2 : Int) : Int
return 0
语法解释
首先,fun
是定义函数的关键字,无论定义什么函数,都要用fun
来声明。
紧跟在fun
之后的是函数名, 这个就没什么要求了,可以根据自己喜好起任意函数名(有意义的为佳)
函数名后接一对括号,里面声明该函数接受什么参数,上述示例中就是两个Int型参数。参数的声明格式是:参数名:参数类型
,其中参数名也是可以任意定义的,如果不想接受任何参数,则保留空括号即可。
参数括号后面那部分是可选的,用于声明该函数的返回值类型,上面实例就表示函数会返回一个Int型数据。
小知识(tip)
此处还有一个Kotlin的函数的语法糖:
当函数中只有一行代码时,Kotlin函数允许我们不必编写函数体,可以直接将唯一的一行代码写在函数定义尾部,中间用等号连接即可。
fun largerNumber(num1 : Int,num2 : Int) = max(num1,num2)
程序逻辑控制
程序的执行语句主要分为三种:顺序语句
,条件语句
,循环语句
顺序语句
顺序语句很好理解,就是程序一行一行往下执行。
条件语句
条件语句主要有两种实现方式:if
和when
。
if语句
此处有一个求两个数中较大值的函数如下
fun largerNumber(num1 : Int,num2 : Int): Int
var value = 0
if(num1 > num2)
value = num1
else value = num2
return value
用var
做value
的关键字是因为value
是需要修改赋值的。
Kotlin中的if语句还有一个额外的功能,就是它是可以有返回值的
。返回值就是if语句的每个条件中最后一行代码的返回值。
因此此时我们可以将上面的函数简化成如下形式:
fun largerNumber(num1 : Int,num2 : Int): Int
val value = if(num1 > num2)
num1
else
num2
return value
为什么这时value
可以用关键字val
了呢?因为if语句使用每一个条件最后一行代码作为返回值,并将值直接赋给了value
变量,因此就没有重新赋值的情况了,因此就不需要var
关键字了。
其实我们可以发现这个代码还可以优化。我们最后返回的是value
,其实也就是if语句返回的值,那么我们就可以发现value
其实也是一个多余的变量,我们可以直接将if语句返回,这样代码会更精简:
fun largerNumber(num1 : Int,num2 : Int): Int
return if(num1 > num2)
num1
else
num2
从函数的语法糖中我们可以将这段代码变得更加精简:
fun largerNumber(num1 : Int,num2 : Int) = if(num1 > num2) num1 else num2
when语句
Kotlin中的when语句有点类似于Java中的switch语句,但又远比switch语句强大的多。
Java的switch语句只能传入整型或短于整型的变量作为条件, JDK1.7之后增加了对字符串变量的支持,但是如果不是以上的几类变量,那么switch并不适合。
Kotlin中的when不仅解决了上述缺点,还增加了许多强大的新特性。
假设此时我们需要编写一个查询考试成绩的功能,输入一个学生的姓名,返回该学生考试的分数。
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
这个getScore()
函数接收了一个学生姓名参数,然后通过if语句判断找到该学生的成绩并返回。但是if语句是否也太过冗余呢?
fun getScore(name : String) = when(name)
"Tom" -> 86
"Jim" -> 77
"Jack" -> 95
"Lily" -> 100
else -> 0
when语句和if语句一样都可以有返回值
,因此我们同样可以使用单行代码的语法糖。
when语句允许传入任意一个类型的参数,然后可以在when的结构体中定义一系列条件,格式为:
匹配值 -> 执行逻辑
。当执行逻辑只有一行代码时,可以省略。
除了精确匹配外,when语句还允许进行类型匹配,此时我们定义一个checkNumber
函数:
fun checkNumber(num : Number)
when(num)
is Int -> println("Number is Int")
is Double -> println("Number is Double")
else -> println("number not support")
上述代码中,is
关键字就是匹配的核心,它相当于Java中的instanceof
关键字。Number
是一个Kotlin内置的抽象类,像Int
、Double
、Long
等都是它的子类,因此此处就让checkNumber
函数接收一个Number
类型的参数,再进入判断。
fun main()
val num = 12
checkNumber(num)
这里向checkNumber
函数传入了一个Int
型的参数,运行程序,结果如图:
when语句的基本用法就是这些。
when语句同样有不带参数的用法,虽然可能不太常用,但是有时候却能发挥很强的拓展性:
fun getScore(name : String) = when
name == "Tom" -> 86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
虽然这种无参数的when语句可能会比较冗余,但是有些场景必须使用它才能实现。
例如,所有名字以Tom开头的名字,分数都是86分,这种情况用有参数的when语句是无法实现的,但是不带参数的when语句却可以解决。
fun getScore(name : String) = when
name.startsWith("Tom") -> 86
name == "Jim" -> 77
name == "Jack" -> 95
name == "Lily" -> 100
else -> 0
无论输入的是Tom
还是Tomxx
,输出都是86分
fun main()
val name = "Tom and Jerry"
print(getScore(name))
kotlin基础学习(代码片段)
写在前面在刚开学的时候,买了一本《第一行代码Android》,但一直在上课没有机会看,这几天刚好写完了上一个项目,这段时间就对这本书进行了学习。在这本书中,由于谷歌大力推广kotlin语言,将其作为android开发的首推语言... 查看详情
字节+谷歌超全kotlin学习王炸笔记,kotlin入门教程+高级kotlin强化实战(附demo)(代码片段)
...们为什么要尝试Kotlin?Google发布申明,目前已经有35%的Android专业开发人员使用kotlin(爆发式增长)Google与Oracle源于Android的恩怨持续已久,也一直想要找一种语言代替JavaJava以后要开始收费了,可能导致一部分公... 查看详情
kotlin语言学习笔记
1funmain(args:Array<String>){2println("Hello,World!")3} 查看详情
android开发学习之路--kotlin之基础语法
...a代码写久了自然会想换个语言玩一下,而且kotlin作为android的官方语言,总是要学习下的,故这里先来学习下一些基本语法吧,打个小基础,后面才能游刃有余地开发。1基础语法这里省略了很多一般的语言需... 查看详情
(笔记)(代码片段)
探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情
(笔记)(代码片段)
探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情
androidgradle学习笔记语言和命令(代码片段)
...是使用Kotlin来写还是Groovy来写。不一定说你是KotlinAndroid开发者就一定要用Kotlin来写Gradle,我们得判断哪种写法更适合项目、更适合开发团队人群(学习成本)。所以下面来学习一下这两种语言的差异。1 查看详情
2019年度计划
...生态,而且还可以对前端开发如html,js,css等有个认识2Android开发语言kotlin,目标是能对新的工程完全进行kotlin开发以代替java语言 kotlin作为google官方所推的语言,相比较java其本身也有很强的性能,协程,多平台代码复用(... 查看详情
kotlin基础语法学习笔记(代码片段)
...in是一门与Swift类似的静态类型JVM语言,由JetBrains设计开发并开源。与Java相比,Kotlin的语法更简洁、更具表达性,而且提供了更多的特性,比如,高阶函数、操作符重载、字符串模板。它与Java高度可互操作ÿ... 查看详情
字节内部超全kotlin学习笔记,快速上手kotlin开发,基础+实战+源码,手把手带你吃透kotlin语法与协程。(代码片段)
...0个应用程序中有80%以上使用Kotlin。这也意味着,对于Android应用开发者来说,仅仅掌握Java是不够的,你还应该学习Kotlin,才能追上技术发展趋势,在工作中更加游刃有余。高效掌握Kotlin的方法Kotlin是门典型的... 查看详情
了解kotlin,看这个就够了
在这本书中,我会使用Kotlin作为主要的语言来开发一个android应用。方式是通过开发一个应用来学习这门语言,而不是根据传统的结构来学习。我会在感兴趣的点停下来通过与Java1.7对比的方式讲讲Kotlin的一些概念和特性。用这种... 查看详情
android:kotlin详细入门学习指南-基础语法(代码片段)
Android:Kotlin详细入门学习指南-基础语法(一)本人也是在初学Kotlin,如有错误,请帮忙指出,持续更新Kotlin被Google官方认为是Android开发的一级编程语言自2019年GoogleI/O以来,Kotlin就成为了Android移动开发的首选。... 查看详情
想要了解kotlin,看这个就够了
在这本书中,我会使用Kotlin作为主要的语言来开发一个android应用。方式是通过开发一个应用来学习这门语言,而不是根据传统的结构来学习。我会在感兴趣的点停下来通过与Java1.7对比的方式讲讲Kotlin的一些概念和特性。用这种... 查看详情
kotlin学习资料
...一些最新最潮的技术文章2017-5-18GoogleI/O大会指定Kotlin成为Android的官方开发语言本项目地址:https://github.com/kotlinandroid/kotlin-for-android欢迎大家??????以下是收集整理的Kotlin资料Kotlin官方资料Github地 查看详情
android学习笔记-service(kotlin实现)(代码片段)
...vice简介service和activity、contentProvider、BroadcastReceiver并称为Android四大组件,其地位不言而喻,在使用中也确实举足轻重。service的直接翻译为服务,它是一种在后台执行长时间 查看详情
androidgradle学习笔记语言和命令(代码片段)
...是使用Kotlin来写还是Groovy来写。不一定说你是KotlinAndroid开发者就一定要用Kotlin来写Gradle,我们得判断哪种写法更适合项目、更适合开发团队人群(学习成本)。所以下面来学习一下这两种语言的差异。1.Groovy和Kotlin的... 查看详情
别扯了,kotlin真是项目开发必备吗
...势是什么?你是否考虑过切换到Kotlin,它是支持Android开发的热门语言。它在开发人员中迅速普及背后的原因是什么?一、简介Kotlin是一种在Java虚拟机上运行的静态类型编程语言。它主要是JetBrains开发团队所开发出来... 查看详情
《第一行代码》第三版-第二章(笔记)(代码片段)
探究新语言,快速入门Kotlin编程1.Kotlin1.1Kotlin在Android的地位在Android诞生以来,一直都是只提供Java这一种语言来开发应用程序的在2017年的I/O大会上,Google宣布了Kotlin作为Android的一级开发语言,和Java平起平坐在2019... 查看详情