Android开发笔记——快速入门(Kotlin入门)
系列文章目录
Android开发笔记——快速入门(贰)[创建项目和项目内容分析]
Android开发笔记——快速入门(壹)[系统架构和Android Studio安装]
文章目录
软件环境:
- Jetbrains Toolbox
- Android Sudio 2021.1.1 Bumblebee
- JDK 17.0.2
Why Kotlin?
Kotlin作为Jetbrain全新开发的语言,虽然是基于JVM进行的开发但是却是JAVA的温和改良版本,如果说C是一个国色天香的感觉,那么Java就是窈窕淑女而Kotlin就是小家碧玉,端庄优雅的温柔。
Kotlin是一个极其成功的开源项目,代表了目前编程语言的一个发展方向,Kotlin在编写代码时有如下优势:代码简洁高效、函数式编程、空指针安全、支持lambda表达式、流式API等。光说起来你会感觉很难懂到底在说什么,但是当你跨进Kotlin大门之后才能体会到运用Kotlin编程的快乐。
如何使用Kotlin开发Android?
首先你需要安装Android Studio来进行开发,详细安装过程可以参考:Android开发笔记——快速入门(壹)
根据教程创建一个基于Kotlin的Android项目:
具体如何创建项目可以参考:上一篇文章。
创建完成以后,在相同包下创建一个Kotlin类:
Kotlin class的创建:
Kotlin的变量与函数
创建完成以后就可以愉快的,使用AS来进行kotlin的编写:
首先创建一个主函数:
package com.example.codewithkotlin
fun main()
{
println("Hello Kotlin!")
}
你可以点击左边的小箭头运行一下
kotlin的变量
kotlin的变量与Java有很大的不同,可以总结如下两点:
- 定义时不需要指定类型,而是需要指定变量是否可变。
- 没有保留Java基本的数据类型,而是使用对象数据类型。
举例:
不需要指定变量类型,其会自动推导:
fun main()
{
val a=10
println("a is " + a)
}
指定数据类型时不会再自动推导:
fun main()
{
val a : Int=10
println("a is " + a)
}
输出结果:
a is 10
val与var是用来指定是否为变量的关键字,val类似于java的final,var就是常规的变量,为什么要这样设计你如果有编程基础你就知道变量是不安全的,val,var就是为了指定这个变量是否可变(强制要求显式定义),这有一个小技巧,定义变量时应该是都定义为val,只有你需要var的时候再回来将这个变量改定义为var,这样就保证了基本所有变量的安全。
Kotlin的函数
kotlin的函数与Java中的方法其实很像,但是更自由,书写更方便。
其基本定义格式如下:
fun funName(param1 : Int,param2 :Int) :returnvaluetype
{
return value
}
如果没有返回参数就可以省略:returnvaluetype
部分,从这里看出Kotlin的设计思想:
能省就省
简化以后就可以表现为:
fun funName(param1 : Int,param2 :Int)
{
}
为了保持设计思想,Kotlin做出了更多的省略,当你的函数体只有一块作为返回值的代码时,可以直接省略大括号,用等号来连接,这里用一个返回最大值的函数来表示:
fun maxNumber(num1 :Int ,num2 :Int):Int = max(num1,num2)
但是我们说过Kotlin具有出色的推导机制,那么他能不能推断出这里一定返回的是和max函数返回相同的内容呢?当然可以。所谓我们进一步简化省略去返回值:
fun maxNumber(num1 :Int ,num2 :Int)= max(num1,num2)
使用Kotlin以后你就会发现能在一行就实现一个完整的函数,但这并不是我们想要的,因为这里我们只是对MAX函数进行了一个包装,里面并没有任何逻辑部分。下面我们来写一下如何写逻辑部分的内容,并对其进行简化,进一步体验其强大性。
Kotlin的逻辑控制
Kotlin的if
if在使用的时候与传统的if并没有太大区别,但是他还有一个额外的功能,可以有返回值。为什么要给if来整一个返回值呢?返回值常常与函数相关,对于现在流行的函数式编程,Kotlin也对其做出了支持,if的返回值就是如此,if语句会自动返回其最后一条语句的返回值:
常规IF的写法如下:
fun maxNumber(num1 :Int ,num2 :Int) :Int
{
var maxnumber =0
if(num1 >= num2)
maxnumber = num1
else
maxnumber = num2
return maxnumber
}
使用其返回值如下,是不是看起来更简略一点了呢:
fun maxNumber(num1 :Int ,num2 :Int):Int
{
val maxnumber = if(num1 >= num2)
num1
else
num2
return maxnumber
}
其实还可以再简略一下我们可以把maxnumber看成一个语句,这样他就可以直接给函数返回内容,我们就可以省略函数体的括号和返回值类型:
fun maxNumber(num1 :Int ,num2 :Int)=if(num1 >= num2)num1 else num2
这样就实现了最简洁的写法。
Kotlin的when
Kotlin的when就是Java,C中的Switch case,负责的是样例匹配的工作,当你需要匹配内容很多的时候用if,是很不优雅的,但是Kotlin的when提供了一种简介方便的方式。
我先提供一个写法:
fun getGender(name : String) =
when (name)
{
"zzy"-> println("boy")
"lxl"-> println("girl")
"hrq"-> println("boy")
else -> println("not a boy or girl")
}
这段代码给我们提供了一个样例,我们通过传入任意一个类型的变量来使用when来进行匹配,when后面的括号就是要匹配的对象,下边的函数体就是要匹配的内容,你可以发现他取消了case等关键字而是使用 “->” 来作为关键字,意义表达明确,而且你不用担心执行完成后没有break会自动向下运行,每一个匹配后会执行完自己的逻辑代码然后退出。值得提醒的是你的逻辑代码只有一行的时候可以省略“{}”。
除了数据匹配之外,when语句还可以进行类型匹配,没错就是你想的那个数据类型,如果你想起来Kotlin中没有基本的数据类型,而是全部都是类数据,你就会意识到为什么要这样设计,为了类型匹配只是一小部分优点。
下面举一个例子:
fun getType(number : Number) =
when (number)
{
is Int-> println("Int type")
is Float-> println("Float type")
is Long-> println("Long type")
else -> println("not my type")
}
通过设置输入的number为所有数字类型的父类Number,你可以输入任意类型的数据,然后使用is关键字来检测是不是对应的类型。
你可以看到When里边都是同一种类型的匹配模式,但是如果要使用不同的匹配模式呢,打个比方我一个想要分离出名字里面有是zzy的,另一个想要分离出名字是lxl怎么办?很简单这里去掉when后边的括号就好了,将匹配表达式写入大括号里面。
fun getGender2(name : String) =
when
{
name.contentEquals("zzy")-> println("a part of zzy")
name === "lxl"-> println("girl")
else -> println("not Anyone")
}
Kotlin的循环
在介绍循环之前先介绍一个新的东西,区间
区间这个东西很简单,它的作用就是按照规律生成一组数列,我们举个例子试一试:
fun rangeTest()
{
val range = 1..10
val untils = 0 until 10
val downtos = 10 downTo 1
println(range)
println(untils)
println(downtos)
}
输出结果:
1..10
0..9
10..1
你可以看见这两个区间生成的数列区别,一个是包含左右边界,一格式只有左边界没有右边界。
有了区间以后就可以使用for来迭代,for循环在Kotlin中有了巨大的变化,我先来展示一下:
fun rangeTest()
{
val range = 1..10
val untils = 0 until 10
println(range)
println(untils)
for (i in 10 downTo 1)
println(i)
}
输出:
1..10
0..9
10
9
8
7
6
5
4
3
2
1
你可以看到了一个和java c都不太像的for 更想java里面的增强for循环,你就意识到这里for转化为了一个迭代器的作用。在后边我再继续讲解for的强大之处。