当前位置:网站首页>【无标题】
【无标题】
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):返回类型
{
…
}*
其他的都在文中,多注意就可以啦,今天先写这么多,以后有缘咱们接着说。
边栏推荐
- La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2
- Mysql database index study notes
- 如何成为一名高级数字 IC 设计工程师(1-6)Verilog 编码语法篇:经典数字 IC 设计
- ViewPager2和VIewPager的区别以及ViewPager2实现轮播图
- 12、 Sort
- NETCORE 3.1 solves cross domain problems
- 创建一个长度为6的int型数组,要求数组元素的值都在1-30之间,且是随机赋值。同时,要求元素的值各不相同。
- 网易云微信小程序
- [4G/5G/6G专题基础-147]: 6G总体愿景与潜在关键技术白皮书解读-2-6G发展的宏观驱动力
- thinkphp3.2信息泄露
猜你喜欢
網易雲微信小程序
信息安全实验三 :PGP邮件加密软件的使用
Sublime Text4 download the view in bower and set the shortcut key
How to speed up video playback in browser
沙龙预告|GameFi 领域的瓶颈和解决方案
Unity uses mesh to realize real-time point cloud (I)
Jenkins automated email
面试被问到了解哪些开发模型?看这一篇就够了
Unity3d interface is embedded in WPF interface (mouse and keyboard can respond normally)
In fact, it's very simple. It teaches you to easily realize the cool data visualization big screen
随机推荐
Dynamics 365online applicationuser creation method change
Leetcode daily questions (2316. count unreachable pairs of nodes in an undirected graph)
How does mongodb realize the creation and deletion of databases, the creation of deletion tables, and the addition, deletion, modification and query of data
数据库多表关联查询问题
esp8266使用TF卡并读写数据(基于arduino)
La différence entre viewpager 2 et viewpager et la mise en œuvre de la rotation viewpager 2
面试被问到了解哪些开发模型?看这一篇就够了
Mysql database lock learning notes
[4G/5G/6G专题基础-147]: 6G总体愿景与潜在关键技术白皮书解读-2-6G发展的宏观驱动力
Jemter operation
**grafana安装**
STM32 and motor development (from stand-alone version to Networking)
**Grafana installation**
Unity shader (to achieve a simple material effect with adjustable color attributes only)
NETCORE 3.1 solves cross domain problems
4、 Fundamentals of machine learning
Elaborate on MySQL mvcc multi version control
華為HCIP-DATACOM-Core_03day
Using JWT to realize login function
网易云微信小程序