当前位置:网站首页>【无标题】
【无标题】
2022-07-07 07:02:00 【光阴剑客】
前言
我毕业以来一直从事Android开发,并且使用的一直都是Java语言。大家都知道,自从oracle收购了sun公司后,Java也成了他们的囊中之物,慢慢的走向了收费的道路,可是你收费就收费吧,还把Google给告了,搞得我们这些用java开发android应用的人很慌张呀。要是他告赢了,我们是不是就失业了呀?这样的问题肯定那时候很多人都在想吧。可是我就一直不信邪,我觉得Google应该不会妥协吧。没想到后面Google宣布了Kotlin作为开发语言,我其实内心很是抵触,Java写的好好的,咋就突然换语言了呀。内心难受得一匹,虽然Java还仍然支持,但是害怕哪一天像当初Android Studio取代eclipse那样,到时候就尴尬了。我相信Google的工程师们肯定也很恼火。如下图,来自Google工程师的吐槽:但是大势所趋,我们要未雨绸缪,现在开始还不晚,有Java基础学习kotlin不是很难,多上手练练我觉得没啥大问题,废话不说了,开始学习吧。学习使我快乐。。。。。
一、Kotlin变量定义和使用
kotlin的变量定义格式:var 变量名 :类型名 = 值 或者
val 变量名 :类型名 = 值
例如:var name:String = "walt"
或者val PI:Double = 3.1415926
其中,var 和val关键字的作用是,用var声明的变量是可以修改的,相当于Java中的一般的成员变量,而用val声明的变量是不可修改的,相当于Java中的final关键字修饰的变量。上面的例子中,你可以对name再进行赋值,如:name = "zhongxj"
但是无法再对PI变量进行赋值
二、Kotlin内置数据类型
String | 字符串 |
---|---|
Char | 单字符 |
Boolean | 布尔值 |
Int | 整型 |
Double | 双精度浮点型 |
Float | 浮点型 |
List | 集合 |
Set | 无重复的元素集合 |
Map | 键值对集合 |
三、编译时常量
编译时常量相当于咱们Java中的常量,定义方式为:
const val PI = 3.1415f
需要注意两点:
(1)编译时常量只能是常用的基本数据类型
String,Char,Boolean,Int,Double,Float
(2) 编译时常量不能写在函数内
原因是编译时常量是在编译时赋值,如果定义在函数内,就必须在运行时才能调用函数赋值,那时候就不叫编译时常量了。所以编译时常量只能在函数之外定义,这样就可以在编译期进行初始化了。
四、Kotlin的灵巧之美
(1)字符串模版输出
咱们可以先看下下面的代码:
val garden = "奥森公园"
val time = 6
print("去${
garden}玩了${
time}小时")//字符串模版
//kotlin的if是表达式,可以更灵活,java 的是语句,有局限性
val isLogin = false
print("server response result:${
if(isLogin) "登录成功" else "登录失败,检查请求信息"}")//字符串模版
我们在Java中需要用“+”拼接字符串的时代过去了,现在之间在字符串中写${变量名}就可以输出变量里面的内容啦,而且还可以用if表达式判断后做选择性输出
(2)Range表达式
//range 范围 从哪里 到哪里
if(number in 10..59){
print("不及格")
} else if (number in 0..9){
println("不及格并且分数很差")
}else if (number in 60..100){
println("合格")
}else if (number !in 0..100){
println("分数不在0-100范围内")
}
range表达式表示从“哪里到哪里的”意思,比如number in 0..9
表示变量number在0-9范围内,包括0和9的时候条件为true
(3)when表达式
val info = when(week){
1->"今天天不错"
2->"=看来要下雨"
3->"今天天不错"
4->"今天天不错"
else->{
println("躺平")
}
}
还需要注意的一点是,Java的if是语句,而kotlin的if是表达式,是表达式就意味着它有返回值,when表达式也是一样,所以上面的代码中info变量就是接收when表达式的返回值的,这时有人可能会问,when里面有String类型,也有{}代码块,最后返回的类型是啥呢?其实这时候会返回一个Any,相当于Java 中的object
五、Kotlin的函数
(1)函数的声明格式
kotlin的函数声明和Java的不太一样,kotlin的函数声明格式为:
修饰符 fun 函数名(参数名:类型,参数名1:类型1):返回类型
{
…
}
例如:
private fun method01(age:Int,name:String):Int{
println("name:$name,age is $age")
return 200
}
另外,kotlin的函数声明时可以像C++那样使用默认参数,如下:
private fun actiono2(name:String,age: Int = 18){
println("name is $name,age is $age")
}
调用的时候可以actiono2(“walt”)不用传age,这时候使用的是默认的age,即18
kotlin函数还可以使用具名参数,例如:
private fun loginAction(username:String,password:String,phoneNum:String,age: Int){
println("username:$username,password:$password,phonenum:$phoneNum,age:$age")
}
像这种参数很多的情况下,咱们调用的时候可能会出现传错参数的情况,但是使用具名参数就可以避免这个问题,因为在kotlin中可以像下面这样调用:
loginAction(age=99, username = "zhongxj", phoneNum = "1234", password = "123")//具名参数调用
好了,再来看看Nothing类型的特点
private fun show(number:Int){
when(number){
-1-> TODO("没有这种分数") //相当于抛异常,会终止程序
in 0..59 -> println("不及格")
in 60..70 -> println("优秀")
}
}
这里的TODO(…)就是Nothing类型,它就相当于是Java中的抛出一个异常,如果show()参数传-1的话代码是无法编译通过的,这里的TODO,可不是咱们注释中的TODO:哦,这个地方需要小心一点
最后就是反引号函数了(反引号就是esc下面的那个键,点击就可以得到一个反引号)
例如:
private fun `登录功能20220706测试环境需求编码zhongxj`(name:String,pwd:String){
println("模拟: name $name,pwd: $pwd")
}
意不意外,惊不惊喜,函数还可以这么整。这个其实是为了做测试使用。一般线上的代码都不会这么写,调用的时候像函数一样调用就可以了
`登录功能20220706测试环境需求编码zhongxj`("zhongxj","123")
总结
(1)kotlin的变量定义格式:var 变量名 :类型名 = 值 或者val 变量名 :类型名 = 值
(2)编译时常量只能是常用的基本数据类型
String,Char,Boolean,Int,Double,Float,并且编译时常量不能写在函数内
(3)声明函数:修饰符 fun 函数名(参数名:类型,参数名1:类型1):返回类型
{
…
}*
其他的都在文中,多注意就可以啦,今天先写这么多,以后有缘咱们接着说。
边栏推荐
猜你喜欢
随机推荐
Huawei HCIP - datacom - Core 03 jours
十二、排序
Niuke - Huawei question bank (61~70)
Regular matching starts with XXX and ends with XXX
JS inheritance prototype
数据库多表关联查询问题
Kubernetes cluster capacity expansion to add node nodes
csdn涨薪技术-浅学Jmeter的几个常用的逻辑控制器使用
Dynamics 365Online ApplicationUser创建方式变更
信息安全实验一:DES加密算法的实现
Schema-validation: wrong column type encountered in column XXX in table XXX
沙龙预告|GameFi 领域的瓶颈和解决方案
La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2
进程和线程的区别
软件建模与分析
The use of recycling ideas
Binary tree high frequency question type
Mysql:select ... for update
[cloud native] Devops (I): introduction to Devops and use of code tool
Leetcode daily questions (2316. count unreachable pairs of nodes in an undirected graph)