一.前言
今天学习了一点Kotlin的基础语法,对于也同时在学习Java的我来说,学习过后回顾知识是很有必要的,所以在此浅浅的复习一下。
啥是Kotlin:
Kotlin [1] (科特林)是一个用于现代多平台应用的静态编程语言 [2] ,由 JetBrains 开发。
Kotlin可以编译成Java字节码,也可以编译成JavaScript,方便在没有JVM的设备上运行。除此之外Kotlin还可以编译成二进制代码直接运行在机器上(例如嵌入式设备或 iOS)。 [2]
Kotlin已正式成为Android官方支持开发语言。
Kotlin更是安卓未来发展的方向。
二.比较
(1)Java与Kotlin比较之书写方面
大家还记得初学编程的时候吗,是不是经常因为没有在语句后面加上“ : ”而报错?那么你一定会因为Kotlin不需要在句尾加上这个繁琐乏味的操作而开心的。是的,Kotlin是不需要像其他大部分语言一样需要打分号的。
(2)Java与Kotlin比较之定义变量
我们知道Java中的基本类型有有8种分别是:byte(位)、short(短整数)、int(整数)、long(长整数)、float(单精度)、double(双精度)、char(字符)和boolean(布尔值)。因此我们在定义变量时必须在变量前面加上某个数据类型,但对于Kotlin来讲完全不需用,因为Kotlin中有自动推断数据类型的机制,定义一个变量a,不管a的值时int型,float型,boolean型还是string型都不用再在变量前面声明其属于哪个基本数据类型,在某种程度上方便了程序猿,但也有例外:若在声明变量时未赋值,系统则会报错,因为无法自动推断该变量是属于哪种基本类型,因此这种情况下必须在变量后面加上该数据类型,如:
var name:String
而在变量前面取而代之的是需声明var和val
(a)var定义的变量
Kotlin中var定义的变量是可读可变的。
var age = 1;
age = 3;//程序没有报错
(b)val定义的变量
Kotlin中val定义的变量是只读不可变得,虽然其指向的对象不会变,但对象是可以更改内容的,这点类似于c++中的常指针:指向的位置不会变,但这个位置上的值是可以变的。
val age = 1;
age = 2;//此时程序报错
(3)Java与Kotlin比较之for循环
先来看看Java中的for循环,无非以下两种
for (int i=0;i<10;i++){
//TODO-List
}
for (int num:nums){ //这种就是for-each不关心i的变化,只关心里面的元素
//TODO-List
}
而在Kotlin中for循环是长这样的
for (i in 0..9 step 2){//0..9等价于i>=0 && i<=9
print(nums[i])//step表示每隔i一次增加2,与Java中i+=2是一致的
}
for (i in 0 until 9)//0 until 9等价于i>=0 && i<9
print(nums[i])
for (item in nums){
print(item) //等价于Java的for-each
}
for ((i,num) in nums.withIndex()){ //可以得到索引值以及索引值对应的值,其中i是索引,num是索引处的值
print("$i-$num ") // $ 等价于Java中的字符串拼接的 + 号
}
(4)Kotlin与Java的when与switch之比较
Kotlin中的when语句就是来代替Java中的switch语句的。传统的switch语句中case语句下只能写相对比较简单单一的代码,并且每一个case下面都需要break,相比之下when语句就有很大的优势。
when(c)
in 0..9 -> print() //对于一定范围内显示相同结果相较于Java还是简洁了不少
!in 9..11 -> print()
val result = when(c){
'a' -> {
if(){
}//执行整个代码块并,返回最后一行的值,这点Java是做不到的
}
}
这里能用is关键字判断是否属于person类,若属于则执行print()
val obj:Any? = person();
when(obj)
is person -> print()
以上所有print()都能替换成一个代码块,执行更多的操作
补充:?与!!都是在Kotlin中有着独特的意义。总的来说给一个变量加上?就代表次变量可以为空,后面的逻辑不会报错,在变量后面加!!就代表你告诉系统这个变量一定不为空,但此变量是null,当执行到后面的逻辑时就会报错。
变量只有两种状态:变量值存在和变量值不存在。我们定义变量时,比如要从键盘中输入一段字符串,我们用var input来接收,但有时可能不会输入,直接进入下面的程序,此时input是空的,若下面的程序会用到input.length此时就会报错,需要加上?将它转化为安全类型。
var input = readLine();
print(input.length) //此时系统报错,需在input后面加上?或加上!!告诉系统input一定不为空
附上两张图
var input = readLine();
print(input?.length) //加上?,正确
var input = readLine();
print(input!!.length) //加上!!,正确
浅谈结束,今天就写到里。
网友评论