当前位置: 首页 > 科技观察

与Java的无缝兼容、Kotlin语言的优缺点及建议

时间:2023-03-12 17:14:26 科技观察

从Android7.0开始,谷歌使用的API从OracleJDK转为开放JDK,这对谷歌来说是一个艰难的决定。对于开发者来说,他们非常兴奋,这意味着长期官司可能结束,Android系统开发可以回归正常轨道,继续为全球Android用户带来惊喜。Kotlin语言有什么优点?Kotlin语言被誉为Android世界的Swift。简而言之,可以概括为:完全兼容JavaNullsafe支持lambda表达式(优于Java8)支持扩展体验一致的开发工具链使用Kotlin对Android开发者意味着什么?使用Kotlin进行Android开发有以下好处:更少的空指针异常更小的代码量更快的开发速度更一致的开发体验支持Android开发,提供一系列Android开发插件。由于JetBrains的天然优势(AndroidStudio是在JetBrains开发的IDE中加入一些插件而形成的),AndroidStudio也原地支持Kotlin语言。看看Kotlin语言给我们带来了什么。NullSafe空指针异常确实是困扰Java程序员多年的问题。Swift语言巧妙地解决了这个问题。Kotlin使用相同的解决方案,但语法不同。下面和Java语言做个简单的对比:JavaRoomroom=...;if(null!=room&&null!=room.window){room.window.open();}Kotlinvalroom:Room?=...room?。window?.open()根据常识,我们知道一个房间可能有也可能没有窗户。如果没有窗口,调用open方法自然会引发空指针异常。Java语言的处理方式是在调用方法前进行空值判断,而Kotlin语言使用的是?操作员控制,意思是,如果?如果前面的对象为空,则直接返回空值,不执行后面的语句。它有一个专业的名字:OptionalValue(可选值)相比Java语言,Kotlin语言的处理方式要简单很多,更重要的是:妈妈再也不用担心我程序中的空指针异常了-_-小心读者应该能发现Kotlin语言也去掉了分号,这也和Swift语言的处理方式一致。关于OptionalValue的具体用法,后面我会用一个章节来给大家讲解。请期待我的Kotlin语言系列教程。Function在Kotlin语言中,类终于不再是一等公民。Kotlin语言开始支持面向过程的编程。在Kotlin语言中,可以声明全局函数、内联函数等。也支持函数嵌套,函数可以作为方法参数。对于一些简单的操作,创建一个新的类来处理有时会让人头疼。Kotlin语言终于让我们摆脱了这种尴尬局面。下面来看看函数声明的简单写法,和Java语言JavapublicStingsayHello(Stringname){return"Hello,"+name;}KotlinfunStringsayHello(name:String?):String{return"Hello,$name"}函数的写法就大不一样了。Kotlin语法类似于Swift语言的写法。每个函数都必须使用fun关键字声明。参数类型后跟参数名称。适应过程。同样,我会在后面的文章中专门讲解Kotlin的函数。Lambdas闭包应该是Java程序员非常期待的一个特性,幸运的是Java8已经开始支持这个特性了。两者很相似,我们用Java8的闭包Java8interfaceSum{intadd(intx,inty);}Sumsum=(x,y)->x+yKotlinvalsum:(Int,Int)->Int={x,y做个简单对比->x+y}可见两者的语法非常相似,同样支持类型推导和缩写;不同的是,由于Java语言完全面向对象的特性,闭包必须和接口一一对应。由于Kotlin语言天然支持函数式编程,所以可以直接在参数中使用,无需声明相应的接口。扩展这是我最喜欢的功能之一,Kotlin语言支持扩展现有类。Java程序员对这个特性应该比较陌生,这也是Swift语言的特性之一。所谓扩展,就是在不使用继承的情况下,对已有的类增加新的方法、属性等操作。扩展不会破坏已有的类方法,只是在使用时动态添加。应记住一个原则:扩展优于继承,Java语言不支持此功能。KotlinfunMutableList.swap(index1:Int,index2:Int){valtmp=this[index1]//'this'对应thelistthis[index1]=this[index2]this[index2]=tmp}DataClass正在开发中,我们经常要不停地写一些Model类,用开发工具生成set/get方法。DataClass就是为了简化这个操作而诞生的。数据类将自动生成set/get方法,而不是显式生成set/get方法。看下面的简单用法:KotlindataclassPerson(varname:String?,varage:Int?)只用这么一行代码就完成了Model类的创建,Kotlin会自动为我们生成set/get方法,大大简化了Model类的编写。不过,Java程序员也不必太羡慕。很多Java框架也可以实现这一点,比如Google推出的AutoValue框架等。OperatorOverloading特性在Swift语言和C++语言中也存在。此功能是一把双刃剑。使用运算符重载可以简化使用,但也会损失一些代码的可读性。因此,在使用运算符重载时请慎重考虑。Kotlin语言的特点一时半会说不完。下面我们就一些比较重要的特性和Java语言做一个简单的比较:语言特性KotlinJavaNullSafe支持Java8支持全局函数支持不支持Lambdas支持Java8支持Extension支持不支持DataClass支持不支持(取决于framework)OperatorOverloadingsupports不支持Java语言完全互操作您可能会担心使用Kotlin语言后如何处理以前的Java代码。这种担心是完全没有必要的。JetBrains保证Kotlin和Java语言可以完全相互调用,Kotlin最终会被编译成Java字节码。Kotlin语言的优势据网友统计,使用Kotlin语言可以减少30%左右的代码编写,同时不用担心空指针异常。由于JetBrains的天然基因,Kotlin可以得到更好的维护和升级。***,对于甲骨文对谷歌的频繁诉讼,这也是一次很好的反击。在Kotlin语言发布之后,国外很多开发者推出了大量好用的Kotlin框架,不用再重复造轮子了。同时Kotlin语言可以和Java语言无缝对接,你还在等什么?推荐对于Kotlin语言,大部分开发者对Kotlin语言持积极态度。我也强烈推荐Kotlin语言。如果你熟悉Python和Ruby等脚本语言,或者熟悉Swift语言,Kotlin语言将是你的最佳选择。而如果你厌倦了Java语言冗长复杂的写法,Kotlin语言也值得一试。我相信你会像我一样爱上这门语言。