Kotlin 作为 Android 开发语言相比传统 Java 有什么优势

Kotlin 作为 Android 开发语言相比传统 Java 有什么优势,第1张

1、kotlin比起java,写的程序代码量少了1/2还多(我的感觉),开发时间也减少不少。

2、kotlin几乎可以调用所有原项目的库和代码。

3、google看样子是要铁了心抛弃java,AndroidStudio30已经可以直接新建kotlin项目了,还发新闻说什么“到明年这时候,kotlin在Android将超过50%份额”。

Kotlin的优势

因此,您可能需要考虑切换到设计为在JVM上运行的许多现代编程语言之一。尽管编译为Java字节码的语言不乏,但有一些因素使Kotlin脱颖而出:

与Java的互换性

Kotlin作为Java的潜在替代品的最大优势之一是Java和Kotlin之间的互 *** 作性水平 - 您甚至可以在同一个项目中并行存在Java和Kotlin代码,并且所有内容仍将完美编译。下面,您可以看到由Java Activity和Kotlin Activity组成的项目示例。

事实上,一旦你的混合的Kotlin和Java项目被编译,用户将无法知道您的项目的哪些部分是用Java编写的,哪些部分是用Kotlin编写的。

由于Kotlin和Java类可以并行存在于同一个项目中,所以您可以开始使用Kotlin,而无需像Kotlin一样将整个项目转换为Kotlin,或者专门开始一个新项目,以便您可以在Kotlin尝试您的手。

由于这种互 *** 作性水平,如果您有一个您已经开始工作的项目,您可以在该项目的一小部分中试用Kotlin,而不会影响其余的代码库。而且,如果您确定要继续使用Kotlin,则可以将项目现有的Java代码一次迁移到Kotlin一个文件,也可以将项目的旧Java代码保持原样,并且只能使用Kotlin来实现新的类和功能。

由于Kotlin可以与Java完全互 *** 作,您还可以使用Kotlin项目中的大多数Java库和框架,甚至依赖于注释处理的高级框架。

简单学习曲线

Kotlin旨在加强Java,而不是完全重写,所以您在Java职业生涯中获得和磨练的许多技能仍然适用于您的Kotlin项目。

Kotlin也被设计为Java开发人员有一个温和的学习曲线。 Java开发人员应该发现,Kotlin的大部分语法都很熟悉;例如,用于在Kotlin中创建一个新类的代码与Java非常相似:

1

class

MainActivity : AppCompatActivity() {

Kotlin也被设计为直观易读,所以即使你遇到一些截然不同的代码,你仍然可以得到这个代码的作用。

结合最好的功能和程序编程

目前有一些广泛使用的编程范例,但是当涉及到“哪种方法是最好的”的时候,没有简单的答案。每个编程范例都有自己的优点和缺点,因此尽管功能编程有优势的场景不乏,但程序方法更有效的问题也很多。

那么为什么要在功能和程序之间选择呢?像许多现代编程语言一样,Kotlin旨在通过结合程序和功能编程的概念和元素,为您带来最好的两个世界。

一流的Android Studio支持

Kotlin是由JetBrains开发的,该公司是Android Studio所基于的IntelliJ-IDE的公司。那么,Android Studio对Kotlin有很好的支持并不奇怪。一旦您安装了Kotlin插件,Android Studio就可以在您的项目中配置Kotlin,就像打开几个菜单一样简单。

一旦您为Android Studio设置了Kotlin插件,您的IDE将无需理解,编译和运行Kotlin代码。 Android Studio还为Kotlin提供调试,自动完成,代码导航,单元测试和完全重构支持。

一旦您的Android Studio项目配置为支持Kotlin,您甚至可以将整个Java源文件转换为Kotlin文件,只需点击几下鼠标。

更简洁的代码

如果比较产生相同结果的Java类和Kotlin类,则写入Kotlin的类通常比使用Java编写的一样简洁和紧凑。 而且每个开发者都知道,代码减少意味着更少的错误!

有什么收获?

没有编程语言是完美的,所以虽然Kotlin有很多提供Android开发人员,但您需要注意一些缺点:

额外的运行时大小

Kotlin标准库和运行时将增加您的apk的大小。虽然这只相当于大约800KB,如果您的应用程序已经在很大的一边,那么额外的800KB可能会提示它在边缘,并让用户在下载你的应用程序之前思考两次。

代码的初始可读性

虽然Kotlin的简洁语法是语言最大的优点之一,但是最初可能会发现一些Kotlin很难解读,因为在这么少的代码中有很多事情要做。 Java可能更冗长,但是上面的一切都是明确的,这意味着不熟悉的Java代码比不熟悉的Kotlin更容易破译。

另外,如果使用不当,Kotlin的 *** 作员重载会导致难以阅读的代码。

缺乏官方支持

Kotlin可能在Android Studio中有很好的支持,但值得一提的是,Kotlin没有得到Google的正式认可。

此外,与纯Java项目相比,当您使用Kotlin时,Android Studio的自动完成和编译往往运行速度稍慢。

更小的社区和更少的可用帮助

由于Kotlin是一种相对较新的语言,所以Kotlin社区仍然相对较小,特别是与围绕更为成熟的Java语言的社区相比。如果您切换到Kotlin,那么您可能无法访问相同数量的教程,博客文章和用户文档,并且可能会在论坛和堆栈溢出等场合遇到较少的社区支持。在撰写本文时,在Stack Overflow上搜索Kotlin只返回标签为Kotlin的4,600个帖子,而包含Java标签的高达1,000,000个帖子。

kotlin 为数组增加了 Array 类,为元素是基本类型的数组增加了 XxxArray 类(其中Xxx 可以是 Byte、Short、Int 等基本类型)

kotlin 的集合体系抛弃了 Java 集合体系中的 Queue 集合,但增加了可变集合和不可变集合的概念,与java集合类似的是, kotlin的List 代表有序、集合元素可重复的集合 Set 代表无序、集合元素不可重复的集合,Map则采用 key-value 对的形式存储数据

kotlin 既可允许通过 Array<T>类的构造器来创建实例,也可通过arrayOf()等工具函数来创建实例

arrayOf():无须显式指定数组的长度,但需要依次列出每个数组元素

arrayOfNulls():需要显式指定数组的长度,数组元素全部被初始化null,需要用泛型指定数组元素的类型

emptyArray():创建一个长度为0的空数组,需要用泛型指定数组元素的类型

Array(size:Int, init: (Int)->T)构造器:需要显式指定数组的长度,并可通过 Lambda 表达式来动态计算各数组元素的值

由于Array<T>类要求它的元素必须是引用类型,因此,如果程序将基本类型的值存入 Array<T>中 Kotlin 会将这些基本类型的值自动装箱成包装类,为此, kotlin 专门提供了 ByteArray、ShortArray、IntArray、LongArray、CharArray、FloatArray、DoubleArray、BooleanArray 用于存储基本类型,不会进行自动装箱

XxxArray 数组不支持使用将元素初始化为 null 方式来创建数组,因为基本类型的元素不允许为 null

访问数组元素都是通过在数组引用变量后紧跟一个方括号[]实现的,方括号里是数组元素的索引,索引值大于0,且小于数组的长度

程序还可使用in 、!in 来检查某个索引是否位于数组的索引区间内,Kotlin 还为数组提供了lastlndex 属性,用于返回数组最后一个元素的索引值,该索引值通常等于size-1

由于数组还提供了用 operator 修饰的 plus()、 contains()方法,因此数组可通过+、 in 运算符进行运算

用一维数组的方式来处理多维数组

Kotlin 的集合类由两个接口派生:Collection和Map,又被分成两大类:可变集合和不可变集合,只有可变集合才能添加、删除、修改元素,不可变集合只能读取元素

Kotlin 只提供了 HashSet、HasMap、LinkedHashSet、LinkedHashMap、ArrayList 这几个集合实现类,而且它们都是可变集合,Kotlin 的不可变集合类并没有暴露出来,只能通过函数来创建不可变集合,依然可以使用 Java 集合框架提供的其他集合类

推荐使用 Kotlin 提供的工具函数来创建 Set 集合

其中 setOf()、mutableSetOf()、linkedSetOf()创建的 Set 集合能维护元素的添加顺序sortedSetOf()函数创建的 Set 集合会按照大小对元素排序,如果希望 Set 集合不维护元素顺序,只有通过 hashSetOf()函数创建 Set 集合才行

Set 集合中很多方法与 Array 的方法功能相似,例如 all (判断是否所有集合元素都满足指定规则)、 any(判断是否任一元素都满足指定规则)、associate(根据 Set 集合生成Map 集合)、drop(按规则去除集合的部分元素)、filter(对集合元素执行过滤)、 find(查找集合元素)

Set和MutableSet 都包含 Iterator()方法,但普通 Set的iterator()方法返回的是Iterator 对象,该 Iterator 对象只有 hasNextOf()、nextOf()两个方法:而 MutableSet的iterator()方法返回的是 Mutablelterator 对象,该对象除hasNextOf()、nextOf()两个方法之外,还提供了一个remove()方法,该方法可用于在遍历时删除元素

List 集合的最大特征有序可重复

推荐使用工具函数来创建List 集合

Set 支持的 *** 作 List 一般都能支持,还增加了通过索引 *** 作集合元素的方法

在可变的 Set 中介绍的方法,可变的 List 也完全支持,还增加了根据索引执行插入、删除、替换的方法

用于保存 key-value 对,也被分为可变的和不可变的

推荐使用 Kotlin 提供的工具函数来创建 Map 集合

1匿名函数定义:匿名函数是指的没有函数名字的函数,例子如下:

fun main(){

val len ="kiiiing"count();

println(len)

val len2 ="kiiiing"count{

        it =='i'

    }

    println(len2)

}

其中的"kiiiing"count{} 就是匿名函数,相当于一个表达式,有返回值,这个匿名函数内部是类型为char,变量名为it的字符,相当于把kiiing字符串分解

2匿名函数的类型和隐式返回

例子如下:

fun main(){

//函数输入输出的声明

    val methodAction :() ->String

    //对上面函数的实现,这里是匿名函数,匿名函数没有返回值,即不需要写return,最后一行就是返回的内容

    methodAction ={

          "hello"

    }

    println(methodAction())

}

3匿名函数参数的学习

对比上面拆解的方式定义一个匿名无参函数,下面是一个整合形式的有参匿名函数的定义:

fun main(){

    val methodAction :(Int,Int,Int) ->String ={ n1, n2, n3->

        "value is ${n1},${n2},${n3}"

    }

    println(methodAction(1,2,3))

}

4匿名函数中it关键字的学习

fun main(){

//如果定义了一个参数的匿名函数,默认it参数名字

    val methodAction2 : (String) ->String ={

it

}

}

5匿名函数的类型推断

fun main(){

//匿名函数的返回值推断

    val methdFunction ={ v1:Double, v2:Float, v3:Int ->

          ""

    }

}

6lambda的学习

fun main(){

//匿名函数 == lambda表达式

    val addNumResult ={ number:Int, number2:Int ->

        "两数相加的和:${number + number2}"

    }

    println(addNumResult(3,5))

//匿名函数返回Any类型,lambda表达式的参数Int, lambda表达式结果Any类型

    val weekResumtMethod ={ number:Int ->

        when(number) {

1 ->"星期一"

            2 ->"星期二"

            3 ->"星期三"

            4 ->"星期四"

            5 ->"星期五"

            else -> -1

        }

}

    println(weekResumtMethod(3))

}

7匿名函数中参数是函数的函数

fun main(){

loginApi("king","1234",responseResult = { reason:String,code:Int ->

        println("登陆情况${reason}")

})

}

const val USER_NAME_SAVE_DB ="king"

const val USER_NAME_SAVE_PWD ="1234"

fun loginApi(username:String, userpassword:String, responseResult :(String,Int) ->Unit){

if(username ==null || userpassword ==null){

TODO("用户名密码为空")//出现问题,终止程序

    }

if(usernamelength >3 && userpasswordlength >3){

if(webServiceLoginApi(username,userpassword)){

//登陆成功

              responseResult("login success",200);

}else{

//登陆失败

              responseResult("login failed",400);

}

}else{

TODO("用户名密码不合格")

}

}

private fun webServiceLoginApi(name:String,passowrd:String) :Boolean{

return if(name ==USER_NAME_SAVE_DB && passowrd ==USER_NAME_SAVE_PWD){

true

    }else{

false

    }

}

8匿名函数参数是函数的函数的简化写法

fun main(){

//第一种写法

    loginApi2("king","1234",{ reason:String,code:Int ->

        println("登陆情况${reason}")

})

//第二种写法

    loginApi2("king","1234",responseResult = { reason:String,code:Int ->

        println("登陆情况${reason}")

})

//第三种方式

    loginApi2("king","1234"){ reason:String,code:Int ->

        println("登陆情况${reason}")

}

}

9匿名函数的内联学习

--如果一个函数的参数没有lambda,就不需要声明成内联

--如果一个函数的参数有lambda表达式

(1)如果一个函数不使用内联,在使用前会生成多个对象来完成lambda的调用

(2)如果一个函数使用内联,相当于c++中的宏定义,宏替换

结论:如果函数参数有lambda,尽量使用incline关键帧,内部会做优化,减少函数,对象开辟的损耗

10函数引用

函数引用是指 把普通函数 变成 函数类型的对象

::函数名 可以转换成对象,一个函数lambda参数

fun main(){

loginApi("king","1234",::excuteResponseResult)

}

fun excuteResponseResult(reason:String,code:Int){

println("success")

}

const val USER_NAME_SAVE_DB4 ="king"

const val USER_NAME_SAVE_PWD4 ="1234"

fun loginApi3(username:String, userpassword:String, responseResult :(String,Int) ->Unit){

if(username ==null || userpassword ==null){

TODO("用户名密码为空")//出现问题,终止程序

    }

if(usernamelength >3 && userpasswordlength >3){

responseResult("login success",200);

}else{

TODO("用户名密码不合格")

}

}

11函数类型作为返回类型

fun main(){

show("")

}

fun show(value:String) : (String,Int) ->String{

return {name:String,age:Int ->

        ""

    }

}

以上就是关于Kotlin 作为 Android 开发语言相比传统 Java 有什么优势全部的内容,包括:Kotlin 作为 Android 开发语言相比传统 Java 有什么优势、应该使用Kotlin进行Android开发吗、kotlin数组和集合等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9742906.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-01
下一篇 2023-05-01

发表评论

登录后才能评论

评论列表(0条)

保存