从google扶正Kotlin为Android开发的第一语言后,越来越多的项目开始使用Kotlin。虽然Kotlin与Java在某些地方存在一些相似的语法,而且AndroidStudio支持将Java转化为Kotlin的操作。但其实Kotlin也有其独特的语法和一些细节,补充基础语法和细节就显得尤为必要,否则在真正的项目中有的是不会用或者看不懂的。那么就开始这一系列基础的学习吧!
1、声明变量
var maxNum:Int = 10
对应顺序:变量定义关键字 变量名:变量类型 = 值
Kotlin的数据类型全为引用类型,在编译的时候编译器会将对应的引用类型转化为基本类型
String、Char、Boolean、Int、Double、List、Set、Map
2、只读变量与可变变量
要声明可修改变量,使用var关键字
要声明只读变量,使用val关键字
var maxNum:Int = 10
//var 变量 val 不可变量,只读变量
val age = 20
//maxNum为可变变量,可以进行修改
maxNum = 11
//age为只读变量,不允许修改,此句编译不通过
age = 21
3、类型推断
对于已声明并赋值的变量,它允许你省略类型定义
//该句name变量的类型被自动推断为String
var name = "Jack"
//如果进行下面的赋值操作,编译器会提示不能将Int类型的数据赋值给String类型的变量
name = 99
4、编译时常量
编译时常量只能在函数之外定义,因为编译时常量必须在编译时赋值,而函数都是在运行时才调用,函数内的变量也是在运行时赋值,编译时常量要在这些变量赋值前就已存在。编译时常量只能是常见的基本数据类型:String、Int、Double、Float、Long、Short、Byte、Char、Boolean
//定义在函数之外 编译时常量
const val MAX = 100
5、if/else if表达式
fun ifElseExpression(){
val age = 3
if(age < 3){
println("婴幼儿")
}else if(age < 12){
println("少儿")
}else{
println("青少年")
}
}
//输出结果
//少儿
if/else if条件表达式与Java式一样的,没啥好说的
6、range表达式
int a…b,int关键字用来检查某个值是否在指定范围
也可以用!in来检查不在某个范围
fun rangeExpression(){
val age = 3
if(age !in 0..3){
println("不在0-3范围")
}else{
println("在0-3范围")
}
if(age in 0..3){
println("婴幼儿")
}else if(age in 3..12){
println("少儿")
}else{
println("青少年")
}
}
//输出结果
//在0-3范围
//婴幼儿
这里需要注意的是a…b的时候其实是包含b的
7、when表达式
when表达式允许你编写条件式,在满足某个条件时执行对于的代码。与Java的switch/case非常类似,但更强大。if/else if也可以使用when来改进
fun whenExpression(){
val age = 3
when(age){
1 -> println("1岁")
2 -> println("2岁")
3 -> println("3岁")
else ->{
println("大于3岁")
}
}
}
//输出结果
//3岁
8、String模板
模板支持在字符串的引号内放入变量值,还支持计算表达式 添加${}来使用。这个在Java里是没有的。比如我们希望输出Hello Jack Nice to meet you!这样一句话,但Jack这个名称是需要动态改变的,那我们在Java里面是需要进行代码上的拼接的。
String str = "Hello ";
String name = "Jack";
String str1 = " Nice to meet you!";
System.out.println(str+name+str1);
但在Kotlin中,我们可以这样
val name = "Jack"
println("Hello $name,Nice to meet you!")
是不是很爽?如何我们要进行判断进行输出的话,在Java里面也是非常麻烦的,但Kotlin就简单多了。比如我们根据年龄来输出,下面的代码可以尝试下,慢慢体会吧,确实简单很多。
val age = 10
println("我${age}岁了,已经是个${if (age > 10) "少儿" else "青少年"}了")
9、函数
//这就是一个函数
fun rangeExpression()
private fun doSomething(age:int,name:String):String
对于分别为:可见性修饰符 fun关键字 函数名 (函数参数) : 返回类型
fun doSomething(age:Int,flag:Boolean = false):String{
return "age is ${age} flag = ${flag}"
}
上面我们定义了一个函数,对于函数我们可以给某人参数,默认参数可以不传值,比如我们可以这样调用
doSomething(20)
也可以都传值调用
doSomething(20, false)
还可以使用命名值参的方式,这时候可以不管参数顺序
doSomething(flag = true,age = 30)
Kotlin与Java是可以无障碍互通的,他们可以相互调用,但他们之间又可能存在关键字方面的冲突。比如可能在Java中的某个关键字在Kotlin这边却可以声明为函数名又或者有一些非常特殊的字符,那怎么调用就成了一个问题。这时候我们可以通过反括号来标记该函数名,在调用的时候也加上反括号,这样就可以调用了。
fun `**do`() {
println("特殊的函数名")
}
//调用方式
`**do`()
其实在基本类型和语法这块,与Java是非常类似的(废话嘛,本来就是参考了各种语言来设计的)。所有学习起来还是非常的轻松,与Java差异的地方需要注意下就好了。