当前位置: 首页 > 后端技术 > Java

Kotlin实战[1]Kotlin的定义和用途

时间:2023-04-01 14:00:12 Java

什么是Kotlin?一种用于Java平台的新编程语言。Kotlin简洁、安全、务实,侧重于Java代码的互操作性。Kotlin是运行在Java虚拟机上的静态类型。这种在Android世界中被称为Swift的编程语言是由JetBrains设计和开发的,并且是开源的。在GoogleI/O2017上,Google宣布Kotlin成为官方的Android开发语言。1.Kotlin初体验正确,如下图,享受丝般顺滑~~~~~~~~~~~~~~~~~kotlin,用过的人都说是的,你好,你好,大家好!!!!!!!!!!!!!!!举个栗子:创建一个Person类代表一个“人”,创建一个“人”的集合,找出其中年龄最大的人,打印结果。数据类Person(valname:String,valage:Int?=null)funmain(args:Array){valpersons=listOf(Person("Alice"),Person("Bob",age=29))valoldest=persons.maxBy{it.age?:0}println("Theoldestis:$oldest")}输出:Theoldestis:Person(name=Bob,age=29)我们依次分析:"Data"类,括号内的参数,可空类型(?=),如果不传这个参数,就是nulldataclassPerson(valname:String,valage:Int?=null)"顶层函数"funmain(args:Array){}其中“age=29”是命名参数Person("Bob",age=29))lambda表达式;Elvis运算符(左边的值不为空则返回值,否则返回右边的数据)valoldest=persons.maxBy{it.age?:0}Kotlin的String拼接方式等价于Strings="aaa"+"bbb"+"ccc""最老的是:$oldest"开始喜欢kotlin了吗?,如果要用java实现以上功能,代码可能还需要一半。这只是初体验,不记得没关系,不懂也没关系,后面的章节会慢慢讲解。2.Kotlin的主要特点1.广泛的目标平台(1)Kotlin的首要目标是提供一个更简单、更高效、更安全的Java替代方案,适用于当今所有使用Java的环境,包括web,Android等(2)Kotlin也可以编译为JavaScript,让你可以在浏览器中运行Kotlin代码。2.静态类型Kotlin和Java一样是一种静态类型的编程语言。这意味着所有表达式的类型都是在编译时确定的,编译器可以验证该对象是否包含您要访问的方法或字段。这与动态类型编程语言形成鲜明对比,动态类型编程语言在JVM上的代表包括Groovy和JRuby。这些语言允许您定义可以存储任何数据类型的变量,或返回任何数据类型的函数,并在运行时解析方法和字段引用。这减少了代码大小并增加了创建数据结构的灵活性。但它的缺点是在编译时无法发现拼写错误的名称等问题,进而导致运行时错误。静态类型的好处:-性能-方法调用更快,因为不需要在运行时确定调用哪个方法。-可靠性——编译器验证程序的正确性,因此在运行时发生崩溃的可能性较小。-可维护性——奇怪的代码更容易维护,因为你可以看到代码中使用的对象类型。-工具支持-静态类型使IDE能够提供可靠的重构、精确的代码完成和其他功能。3.函数式和面向对象作为Java开发者,一定熟悉面向对象编程的核心概念,但是函数式编程你可能不是很熟悉。函数式编程的核心概念如下:-一流的函数——使用一个函数(一小块行为)作为一个值,它可以存储在一个变量中,作为一个参数传递,或者由另一个函数返回。-不变性-使用不可变对象,这保证了它们的状态在创建后不会改变。-无副作用-使用纯函数。这些函数在给定相同输入的情况下产生相同的结果,并且不修改其他对象的状态,也不与外界交互。示例://=====程序代码=====:funmain(args:Array){valints=listOf(1,2,3,4,5)varsum=0for(iinints)sum+=isum.log()//日志15}//=====函数代码=====:funmain(args:Array){valints=listOf(1,2,3,4,5)ints.fold(0){a,b->a+b}.log()//Log15}优点:(1)简洁:函数式代码比对应的更高效命令式风格的代码更加优雅简洁,因为把函数当成值可以让你获得更强的抽象能力,从而避免重复代码。熟悉RxJava和java8的童鞋应该都有感觉。(2)安全性:多线程程序中最大的错误来源之一是在没有使用适当的同步机制的情况下在不同的线程上修改相同的数据。如果使用不可变数据结构和纯函数,就可以保证永远不会发生这种不安全的修改,也不需要考虑为它们设计复杂的同步方案。(3)易于测试:没有副作用的功能可以独立测试,因为不需要编写大量的设置代码来构建它们所依赖的整个环境。Kotlin功能集函数类型允许函数接受其他函数作为参数,或返回其他函数。Lambda表达式,允许您使用最少的样板代码方便地传递代码块数据类为创建不可变值对象提供了简洁的语法标准库包含一组丰富的API,允许您在函数式编程中操作对象和集合风格Kotlin允许您使用函数式编程风格,但不会强制您使用它。您可以在需要时使用可变数据,并且可以编写具有副作用的函数而无需跳过任何额外的步骤。然后,毫无疑问,在Kotlin中使用基于接口和类层次结构的库就像Java一样容易。在编写Kotlin代码时,您可以结合面向对象和函数式编程风格,并针对手头的问题使用最合适的工具。4.免费开源Kotlin语言(包括编译器、库和所有相关工具)是完全开源的,可以免费使用。它是根据Apache2许可获得许可的;它的开发在kotlin上完全开放,欢迎来自社区的贡献。如果你想开发Kotlin应用,有IntelliJIDEACommunity2版、AndroidStudio和Eclipse三种开源IDE供你选择,它们都完全支持Kotlin(当然IntelliJIDEAUltimate也支持Kotlin。)3.Kotlin设计理念1.PragmaticKotlin不是研究语言。它不试图提高当前编程语言设计领域的技术水平,也不尝试计算机科学中的创新思想。而是尽可能依赖现有的编程语言,降低语言的复杂度,让他更容易上手。学习。同时IDE对Kotlin的支持也很完善,起到了重要的探索作用。在许多情况下,工具会提示开发人员用更简洁的结构替换常见的代码模式。2.简洁例子:Java需要1000行就可以完成功能,Kotlin只需要300行,霸气十足。Kotlin保证您编写的代码是有意义的。而且代码越简单,您就能越快地理解发生了什么。3.安全性最值得注意的是,NullPointerexception可以被扼杀在摇篮中。Kotlin的类型系统会跟踪哪些值可能为null或可能不为null,并禁止哪些运行时可能导致NullPointer异常。例如://Canbenullvals:String?=null//Cannotbenullvals:String=""//Cannotbenullvals:String=""同时,Kotlin有助于避免:ClassCastException,在Kotlin中将检查和强制转换合并为一个操作,一旦检查了类型,就可以直接引用该类型的成员,而无需额外的强制转换。例如:if(valueisString){//类型检查println(values.toUpperCase())//直接调用这个类型的方法,不需要额外的类型转换}4.我们仍然可以使用现有的库进行互操作,你可以调用java方法,继承java类并实现java接口,在Kotlin类上使用java注解等等。而且我们Koltin调用java,或者java调用kotlin都不费力。不仅如此,IDE支持也很完善:在java和Kotlin源代码文件之间自由切换调试混合语言项目,可以单步调试不同语言编写的代码。当重构kotlin方法时,java代码中对它们的调用也会更新。4.Kotlin编译过程Kotlin的源代码保存在一个后缀为.kt的文件中。Kotlin的编译器对源码进行分析,生成一个.class字节码文件,和java的编译过程是一样的。在kotlin中——你只需要kotlinc命令来编译代码并生成一个.class文件;然后java执行代码Injava-你只需要javac命令编译代码并生成.class文件;然后java执行代码如下图,kotlin编译过程kotlin编译器编译出来的代码依赖kotlin运行时库。如上图所示,它包括Kotlin自己的标准库的定义和Kotlin对标准JavaAPI的扩展。运行时库需要与您的应用程序一起分发。5.总结Kotlin是一种静态类型语言,支持类型推断,允许在保持源代码简洁的同时保持正确性和性能。Kotlin同时支持面向对象和函数式编程风格,通过一流的函数实现更高层次的抽象,通过支持不可变值简化测试和多线程开发,在服务器端运行良好,完全支持现有的java框架,提供新的生成HTML和持久化等常见任务的工具,在Android上也可以完美支持,并为常见的Android开发提供Kotlin友好的功能。完全免费开源,全面支持主流IDE和构建系统KotlinPragmatic,安全,简洁,可与Java互操作,支持紧凑可读的代码,并提供与Java的无限集成。防止NullPointerException和ClassCastException之类的事情发生。文章转自https://juejin.cn/post/684490...,如有侵权请联系删除。