当前位置:网站首页>【无标题】
【无标题】
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):返回类型
{
…
}*
其他的都在文中,多注意就可以啦,今天先写这么多,以后有缘咱们接着说。
边栏推荐
- What development models did you know during the interview? Just read this one
- 面试被问到了解哪些开发模型?看这一篇就够了
- golang select机制和超时问题怎么解决
- 在EXCEL写VBA连接ORACLE并查询数据库中的内容
- Dynamics 365Online ApplicationUser创建方式变更
- 数据建模中利用3σ剔除异常值进行数据清洗
- 十二、排序
- Unity shader (to achieve a simple material effect with adjustable color attributes only)
- Unittest simple project
- csdn涨薪技术-浅学Jmeter的几个常用的逻辑控制器使用
猜你喜欢

Oracle installation enhancements error

Lecture 1: stack containing min function

Mysql database lock learning notes

Information Security Experiment 1: implementation of DES encryption algorithm

Information Security Experiment 3: the use of PGP email encryption software

网易云微信小程序

Unity shader (learn more about vertex fragment shaders)

Variable parameter of variable length function

Over 100000 words_ Ultra detailed SSM integration practice_ Manually implement permission management

H5 web player easyplayer How does JS realize live video real-time recording?
随机推荐
華為HCIP-DATACOM-Core_03day
Connecting mobile phone with ADB
Binary tree high frequency question type
How to use clipboard JS library implements copy and cut function
Unity uses mesh to realize real-time point cloud (I)
超十万字_超详细SSM整合实践_手动实现权限管理
Jenkins task grouping
golang select机制和超时问题怎么解决
四、机器学习基础
Liunx command
信息安全实验三 :PGP邮件加密软件的使用
STM32 and motor development (from stand-alone version to Networking)
Leetcode daily questions (2316. count unreachable pairs of nodes in an undirected graph)
Windows starts redis service
nlohmann json
答案在哪里?action config/Interceptor/class/servlet
Colorbar of using vertexehelper to customize controls (II)
(3/8)枚举的不当用法 之 方法参数(二)
asp. How to call vb DLL function in net project
In fact, it's very simple. It teaches you to easily realize the cool data visualization big screen