当前位置:网站首页>【无标题】
【无标题】
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):返回类型
{
…
}*
其他的都在文中,多注意就可以啦,今天先写这么多,以后有缘咱们接着说。
边栏推荐
- 战略合作|SubQuery 成为章鱼网络浏览器的秘密武器
- JS judge whether checkbox is selected in the project
- Zen - batch import test cases
- 消费互联网的产业链其实是很短的,它仅仅承接平台上下游的对接和撮合的角色
- IIS redirection redirection appears eurl axd
- Leetcode daily questions (2316. count unreachable pairs of nodes in an undirected graph)
- Error: selenium common. exceptions. WebDriverException: Messag‘geckodriver‘ execute
- 信息安全实验二 :使用X-SCANNER扫描工具
- 【frida实战】“一行”代码教你获取WeGame平台中所有的lua脚本
- Interface test API case, data and interface separation
猜你喜欢
Lecture 1: stack containing min function
12、 Sort
Binary tree high frequency question type
In fact, it's very simple. It teaches you to easily realize the cool data visualization big screen
Strategic cooperation subquery becomes the secret weapon of Octopus web browser
章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
STM32 and motor development (from stand-alone version to Networking)
Jenkins task grouping
细说Mysql MVCC多版本控制
Nested (multi-level) childrn routes, query parameters, named routes, replace attribute, props configuration of routes, params parameters of routes
随机推荐
Pycharm importing third-party libraries
【BW16 应用篇】安信可BW16模组/开发板AT指令实现MQTT通讯
STM32 and motor development (from stand-alone version to Networking)
Oracle installation enhancements error
[4g/5g/6g topic foundation-146]: Interpretation of white paper on 6G overall vision and potential key technologies-1-overall vision
Information Security Experiment 4: implementation of IP packet monitoring program
How to become a senior digital IC Design Engineer (5-2) theory: ULP low power design technology (Part 1)
面试被问到了解哪些开发模型?看这一篇就够了
Schema-validation: wrong column type encountered in column XXX in table XXX
CMD startup software passes in parameters with spaces
flex弹性布局
Liunx command
Lesson 1: finding the minimum of a matrix
Create an int type array with a length of 6. The values of the array elements are required to be between 1-30 and are assigned randomly. At the same time, the values of the required elements are diffe
ViewPager2和VIewPager的区别以及ViewPager2实现轮播图
What is MD5
章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
NATAPP内网穿透
Pycharm create a new file and add author information
进程间的通信方式