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

深入使用Kotlin后的感受

时间:2023-04-01 23:31:45 Java

深入使用Kotlin后的感受之前写了一篇关于kotlin的粗略感受,简单描述了kotlin的几个优点,比如空对象的判断。在摸索了一段时间的kotlin之后,发现这些优点远不是kotlin的全部,所以写了一篇深入的文章来谈谈kotlin的使用心得。最近的一个项目开始全面使用kotlin语言,有更多机会体验kotlin的新特性。广泛使用kotlin的感受就是,每当你设计一个问题的解决方案时,突然间的独特灵感都可以被kotlin满足,可以大大提升你的编程体验,这是以前使用任何语言都没有过的感受。使用可设计的代码kotlin,让我感觉自己不受语言控制,你可以控制语言本身。当你需要设计自己的工具时,kotlin对你的帮助很大。它允许您随时随地创建一个独特且易于使用的工具,而不会让您感到突兀。例如,当您厌倦了编写valisError=trueif(isError){throwException("")}时,您可以funBoolean.ifThr(message:String){if(this){throwException(message)}}valisError=trueisError.isThr("")现在你有了一个通过布尔对象直接抛出异常的工具。也许您还想在抛出异常时打印日志。funBoolean.ifThr(message:String,func:(()->Unit)?=null){if(this){func?.let{it()}throwException(message)}}valisError=trueisError.isThr("")//不打印日志,直接抛出isError.isThr(""){//打印日志,抛出log.error("")}甚至可以让布尔值为空,你可以not执行加号判断会抛出异常。funBoolean?.ifThr(message:String,func:(()->Unit)?=null){if(this==true){func?.let{it()}throwException(message)}}valisError:布尔值?=nullisError.ifThr("")也可以扩展List的方法判断一组结果是否全部为真。funList.allTrue():Boolean{this.forEach{if(!it){returnfalse}}returntrue}上面的方法展示了几个特性。它们单独使用时可能不是很强大,但是当组合起来时,你会惊叹于它的表现力和便捷性,可以大大减少你的代码,同时兼顾可读性、优雅实现和实用性的结合。这就是kotlin强大的地方。如果你愿意,可以先优雅地设计,再优雅地编码。当然,优雅只是其真正作用的副产品。让您以低成本的方式设计编码模式,可以帮助您更好地处理业务需求实现的细节,从而专注于业务需求的实现,大大减少逻辑错误的发生,显着减少更正错误的成本。编码过程不再中断你可能遇到过这样的情况(以elasticsearch为例)valsearchRequestBuilder=SearchRequest.Builder().source{it.filter{it.includes("id")}}.index(modelIndexNames).query(query).sort{it.field(FieldSort.Builder().field("id").build())}.size(10000)sort?.let{searchRequestBuilder.searchAfter(it)}searchRequestBuilder。build()可以看到SearchRequest最初的设计思路是使用过程是连续不间断的,但是一旦遇到中间需要判断的地方,就不得不中断这个过程。虽然不影响整体功能,但可读性稍差。可以这样优化:Builder().field("id").build())}.apply{sort?.let{searchAfter(it)}}.size(10000).build()这样在java中难免会有一段interrupted代码在kotlin中可以很流畅的写出来。使用过程中的疑虑在我看来,kotlin充满了优点。但是随着对kotlin的理解和书写的加深,我也渐渐开始担心了。每当我写一些高级的kotlin文字时,我都不确定这些文字是否能被初级工程师完全吸收或理解。当然,这可能只是因为业务逻辑复杂。简单的需求不会用到那么多高级功能。与其担心语法问题,不如担心别人能不能看懂业务逻辑。我主要想谈谈未来。我认为kotlin绝对有资格被广泛接受。大部分场景下,完全替代java是没有问题的。但是在这个项目全面kotlin化的过程中,结合我现在的公司和一些网上论坛的了解,我对国内编程行业大规模使用kotlin的前景不是很看好。首先,我认为国内大厂的Java大型协作代码的专业水平确实不高,至少不是顶级水平。在工作的前两年,我被网上的阿里巴巴Java开发手册所吸引。工厂生产的产品都不错,说明书本身也没有问题。直到2021年,开始钻研框架序列化,研究fastjson,我才开始明白,流通量高的东西不一定是好东西。在我写这篇文章的时候,fastjson在github上的star数是24.9k,而jackson只有7.6k。连阿里巴巴自己的nacos项目都没有使用fastjson。当然,nacos的源码比fastjson要好,但是和国外顶级开源项目相比,还是差了很多。在国内,之前有百度这样的搜索平台,已经平躺了,后来有了gitee,国内第一个开源平台,最开始叫码云,页面设计很落后,功能很多被莫名其妙地塞满了。我不得不有这种悲观的担忧。很难指望这样的互联网公司搭建的技术环境能够推动新事物的发展。更何况在很多小公司,他们不求技术上的进步,只求快速满足自己的需求。没有外部大型互联网公司的推动,接触新事物就更难了。但我仍然有一些希望。希望国内的环境在未来催生出一个热爱科技的环境,不再被固有思维所束缚,勇于探索新的境界。