面向开发学习kotlin-变量和条件表达式

471 阅读5分钟

这一篇先记录一下学习到的kotlin基础,变量的声明,函数的基本写法,条件语句这些,这部分内容不涉及到生僻的关键字,但是又是kotlin入门不得不会的东西

声明变量

var name : String = "鼻涕粑粑"

var/val -> 变量定义关键字

val关键字声明变量为只读变量,var表示变量可读可写;val的作用和Java的final关键字类似,变量赋值后不可修改

多说一句:可能是我写Java的习惯不好,除了在匿名内部类要访问的局部变量不得不声明为final之外,其他的类变量声明很少用final去定义,毕竟要多写一个关键字,不写final也不影响正常的编码工作;kotlin声明变量必须的得带上var/val关键字,那么反正都是要写,变量如果是只读变量,那就定义为val就很理所当然了,写val也就更好的满足开闭原则,对于修改是关闭了,只读变量就不让你直接修改了,能更好的确保代码的正常运行,减少运行时修改变量值导致的不可预期错误

name -> 自定义的变量名

:String -> 变量的类型 定义

变量的类型不同于Java写在变量名的前面,先写变量类型再跟变量名,这点一开始写kotlin就很不习惯了,但是kotlin可以自动进行类型的推断,可以不显式的声明变量名,通过变量的赋值参数,动态的去推断变量的类型,但是由于kotlin依旧是强类型语言,如果推断出了变量类型,再赋值其他类型的值,编译器就会提示不通过的,赋值为非空值,自动推断的类型也是不带?的非空类型,赋值为null也是不可以的

var name = "鼻涕粑粑"
name = 1  // The integer literal does not conform to the expected type String
name = null // Null can not be a value of a non-null type String

= "鼻涕粑粑" -> 赋值运算符和赋值参数

kotlin内置数据类型

类型描述示例类型描述示例
String字符串“鼻涕粑粑”Char单字符“L”
Booleanture/falsetrue falseInt整型30
Double小数1.70List元素集合1,2,3
Set无重复元素的集合“鼻涕”,“粑粑”Map键值对集合“S” to 50,"M" to 60,"L" to 70

跟Java不一样,Java提供的有int,float这类的基本数据类型,也有Integer这类的引用类型类型,kotlin值提供了引用类型这一种数据类型,但是编译器会在Java字节码中,编译为Java的基本数据类型,以提高性能

这里看到Map类型的参数是键值对是使用to关键字进行连接的,后续的文章会介绍to关键字是什么

编译时常量

编译时常量就是在编译期就已经赋值的常量,在Java我们一般使用 static final 去定义编译时常量

const val NAME = "鼻涕粑粑"

kotlin中使用上述的方式进行定义编译时常量,值得注意的是,编译时常量不能定义在函数里面,因为函数都是在运行时才调用,函数内的变量也就都是在运行时才赋值,编译时常量所以只能定义在函数的外面

编译时常量只能是常见的基本数据类型:String、Int、Double、Float、Long、Short、Byte、Char、Boolean

逻辑控制语句

开发中,使用Java的条件控制语句基本上就是 if/else语句,for/while循环语句,还是switch/case条件语句 kotlin中的条件表达式更加的灵活

if/else 表达式在使用上和Java区别不大,只是kotlin中科院直接用来给参数赋值,kotlin中没有三目运算符,科院使用if/else表达式实现

val a = "鼻涕粑粑"
val b = 30
val c = if (b == 18) a else b //使用表达式可以直接赋值

for 循环语句,在循环条件上,kotlin使用range表达式,通过关键字in进行连接

for (a in 1..10){
   //【1,10】1到10的闭区间循环
}

除了使用 .. 表示闭区间之外,range表达式还有其他的关键字来表明边界值是否可以取

表达方式取值
1..4[1,4] -> 1,2,3,4
1 until 4[1,4) -> 1,2,3
4 downTo 14,3,2,1
1..8 step 21,3,5,7

when表达式,加强版的switch/case,Java中switch条件支持的条件类型还是整型,而when表达式科院编写一个条件式,在某个条件满足的时候,执行相应的代码,条件表达和执行逻辑通过 -> 连接; 代码中的if/else分支,都可以改用when表达式,代码条件更好阅读

val name = "鼻涕粑粑"
val age = when(name){
    "鼻涕粑粑" -> 30
    "大鼻涕" -> 18
    else -> 0
}

when表达式也可以直接赋值

string模板

写Java的时候有时候打印一些变量值,还需要通过“” + 变量名 进行字符串的拼接,kotlin提供了可以在引号内放入变量值,简直不要更方便 除了直接插入变量,还可以插入表达式,然后表达式的值会拼接在字符串里面

val name = "鼻涕粑粑"
println("name is $name ,age is ${if (name == "鼻涕粑粑") 30 else 18}")

变量值的插入,直接使用+变量名就行了,如果是表达式,+变量名就行了,如果是表达式,+{},将内如写在{}中即可