当前位置:网站首页>【无标题】
【无标题】
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):返回类型
{
…
}*
其他的都在文中,多注意就可以啦,今天先写这么多,以后有缘咱们接着说。
边栏推荐
- Dynamics 365Online ApplicationUser创建方式变更
- 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
- **Grafana installation**
- 消费互联网的产业链其实是很短的,它仅仅承接平台上下游的对接和撮合的角色
- IIS faked death this morning, various troubleshooting, has been solved
- 如何成为一名高级数字 IC 设计工程师(5-3)理论篇:ULP 低功耗设计技术精讲(下)
- Where is the answer? action config/Interceptor/class/servlet
- 正则匹配以XXX开头的,XXX结束的
- Information Security Experiment 3: the use of PGP email encryption software
- Add new item after the outbound delivery order of SAP mm sto document is created?
猜你喜欢

十二、排序

细说Mysql MVCC多版本控制
![[cloud native] Devops (I): introduction to Devops and use of code tool](/img/e0/6152b3248ce19d0dbba3ac4845eb65.png)
[cloud native] Devops (I): introduction to Devops and use of code tool

H5 web player easyplayer How does JS realize live video real-time recording?

Dynamics 365Online ApplicationUser创建方式变更

Esp8266 uses TF card and reads and writes data (based on Arduino)

Error: selenium common. exceptions. WebDriverException: Messag‘geckodriver‘ execute

二叉树高频题型

stm32和电机开发(从单机版到网络化)

How to use clipboard JS library implements copy and cut function
随机推荐
thinkphp数据库的增删改查
Pycharm importing third-party libraries
章鱼未来之星获得25万美金奖励|章鱼加速器2022夏季创业营圆满落幕
Elaborate on MySQL mvcc multi version control
消费互联网的产业链其实是很短的,它仅仅承接平台上下游的对接和撮合的角色
NATAPP内网穿透
ViewPager2和VIewPager的區別以及ViewPager2實現輪播圖
華為HCIP-DATACOM-Core_03day
How to speed up video playback in browser
Connecting mobile phone with ADB
Unittest simple project
Yapi test plug-in -- cross request
Unity shader (basic concept)
How to become a senior digital IC Design Engineer (1-6) Verilog coding Grammar: Classic Digital IC Design
What is MD5
# Arthas 简单使用说明
第一讲:鸡蛋的硬度
Unity3d interface is embedded in WPF interface (mouse and keyboard can respond normally)
How to use clipboard JS library implements copy and cut function
Error: selenium common. exceptions. WebDriverException: Messag‘geckodriver‘ execute