首页 >>  正文

java函数式编程

来源:baiyundou.net   日期:2024-09-22

IT之家 10 月 29 日消息,Facebook 的母公司 Meta 透露其开发 Android 应用使用的语言从 Java 迁移到了 Kotlin,这是一种更年轻的编程语言,也依赖于 Java 虚拟机(JVM)。

Kotlin 由软件工具制造商 JetBrains 创建,于 2011 年首次亮相,2016 年推出了 1.0 版本。次年,Kotlin 被谷歌采纳为安卓开发的第一类(支持)语言,并被置于自己的基金会管理之下,由 JetBrains 和谷歌资助。

在这之前,大多数安卓应用都是用 Java 编写的。2019 年 5 月,在其开发者大会上,谷歌开始鼓励安卓开发者青睐 Kotlin 而不是 Java。当年年底,谷歌表示,在排名前 1000 位的安卓应用中,有 60% 包含 Kotlin 代码。

IT之家了解到,谷歌推荐使用 Kotlin 的理由是,它更简洁、更安全,支持结构化并发,使异步代码更容易,并且可以与 Java 互操作。不过这可能也与 Java 管理人甲骨文有关,甲骨文曾花十多年时间就 Android 中使用的 Java API 向谷歌提出侵权索赔(最终失败)。

Meta 似乎也对 Kotlin 感兴趣,Facebook 软件工程师 Omer Strulovich 称,他们已经在用 Kotlin 替换其几个流行的 Android 应用中的 Java 代码,这些应用包括 Facebook、Instagram、Messenger、Portal 和 Quest。

Strulovich 说:“Kotlin 被普遍认为是一种比 Java 更好的语言,在每年的 Stack Overflow 开发者调查中,Kotlin 的好评率高于 Java,”他指出,Kotlin 已经成为 Android 开发的流行语言,“因此,我们将 Meta 的 Android 开发转向 Kotlin 是合理的。”

但是,除了在安卓生态系统中的受欢迎程度,Strulovich 承认,在更广泛的市场中,其流行度仍然远逊于 Java,Java 是世界第二大或第三大流行的语言。

Kotlin 相对于 Java 的优势包括:内置为空性(nullability)处理,支持内联函数和 lambda 表达式,代码更短,能定义 DSL(Domain-specific language)。缺点是需要在很长时间内面对混合代码库,更难维护,而且 Kotlin 存在的时间比 Java 短,拥有一套不太成熟的工具。

Strulovich 说:“今天,我们的 Facebook、Messenger 和 Instagram 的安卓应用都有超过 100 万行的 Kotlin 代码,而且转换率还在增加。我们的安卓代码库总共有超过 1000 万行的 Kotlin 代码。”

Strulovich 没有说 Meta 是什么时候开始这种转变的,也没有说其 Android 应用代码的转换比例是多少。

Strulovich 还称:“平均而言,我们已经看到这次迁移的代码行数减少了 11%。并且没有出现性能倒退,所以至少转换后的应用程序保持了它们原有的性能。”

Strulovich 说,Meta 的迁移正在进行,并在加速,但他同时表示:“Kotlin 仍然缺乏一些我们在与 Java 合作中已经习惯的工具和优化。但我们正在努力缩小这些差距。随着我们取得的进展和这些工具和库的成熟,我们也将努力把它们放回给社区。”

","force_purephv":"0","gnid":"9d92849cd5ea4c5be","img_data":[{"flag":2,"img":[{"desc":"","height":"635","title":"","url":"https://p0.ssl.img.360kuai.com/t01435d5d0517e6eb29.jpg","width":"890"}]}],"original":0,"pat":"art_src_1,sexf,sex4,sexc,disu_label,fts0,sts0","powerby":"hbase","pub_time":1667036255000,"pure":"","rawurl":"http://zm.news.so.com/bfebff08d5d313c947fcd6fd518ff3bb","redirect":0,"rptid":"fa4dfdfcb57dd553","s":"t","src":"IT之家","tag":[{"clk":"ktechnology_1:java","k":"java","u":""},{"clk":"ktechnology_1:谷歌","k":"谷歌","u":""},{"clk":"ktechnology_1:rain","k":"rain","u":""},{"clk":"ktechnology_1:facebook","k":"facebook","u":""},{"clk":"ktechnology_1:android","k":"android","u":""},{"clk":"ktechnology_1:安卓","k":"安卓","u":""}],"title":"Meta旗下Android 应用改用Kotlin编程语言 ,称比Java更好用

徒战匡1276java return () - > {system.out.println("");} -
倪阅媚18993569521 ______ 这是lambda表达式, 一种语法(糖) ,可以简化代码,从java8开始支持lambda表达式.有的编程语言,很多早就有lambda表达式了, java从8才开始支持lambda表达式,算比较晚的了.我们以实现Runabble接口,来创建一个线程为例 一: 使用...

徒战匡1276编程语言中的函数是干什么用的? -
倪阅媚18993569521 ______ 函数式编程语言有很多种定义,宽泛的认为支持高阶函数(higher-order function)就算函数式语言的话,大多数现代语言都是支持函数式编程的,例如C/C++,java,C#,lua,python,JavaScript,Scala等等.收紧一下定义的话,加入函数式语言要求的模式匹配、无副作用等要求,那么剩下的就是纯函数式语言,比较常见的有Haskell,Clean等.

徒战匡1276如何更好地使用Java 8的Optional -
倪阅媚18993569521 ______ Optional的出现不仅仅是为了解决一般对象的null判断的,应该是更好的配合java8的函数式风格编程 可以看到Optional里出现的静态方法都是这样的 比如以前你从数据库里获取一个对象,然后对他进行操作,可能是这样的代码 1 2 3 4 5 Object o...

徒战匡1276什么是函数式编程思维 -
倪阅媚18993569521 ______ 回答都有跑题,show概念之嫌,题主问的是函数式思维,这个问题我一直在思考,毕竟是方法论,能力有限,只能从切身实践告诉你1.表达式化 在 最初的时候,需要转变观念,去可变量,去循环,把命令式改成表达式,注意,这只是把你丢在...

徒战匡1276java里,在Main函数里定义Static方法,然后调用,为什么会出错 -
倪阅媚18993569521 ______ Main函数本质上也是个方法,只不过是程序的运行起点而已.你不能在方法里面定义方法啊,这样会有语法错误,js这种函数式编程语言是允许的,但是java不行的.所以你只能在main函数外写好,然后再调用这个静态方法.记住一点:java方法内部不能定义方法

徒战匡1276java的 lumbda 表达式会成为java编程的主流吗?说说看法 -
倪阅媚18993569521 ______ 个人认为不会的,虽然能简化内部类,循环等代码量,但可读性太差,没办法追踪源代码和断点调试.

徒战匡1276java 抽象类 能用lambda表达式吗 -
倪阅媚18993569521 ______ 抽象类不能,但是可以拓展一下.例如,TimerTask是一个抽象类,Timer timer = new Timer(); timer.schedule(new TimerTask() {//代码...}, 1000);在这里用lambda的话就会报错,但可以把Timer拓展一下 public class MyTimer extends Timer { ...

徒战匡1276到底什么是函数式编程思维 -
倪阅媚18993569521 ______ “简单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论.” 摘自 阮一峰先生的文章:《函数式编程初探》 就我个人理解,函数式编程是介于面向对象与面向过程的,中间性编程方法,具体且...

徒战匡1276并发编程的Java抽象有哪些呢?
倪阅媚18993569521 ______ 一、机器和OS级别抽象 (1)冯诺伊曼模型 经典的顺序化计算模型,貌似可以保证... 所以所谓的函数式编程可以解决其中的部分问题. (2)进程和线程 进程抽象运行的程序...

徒战匡1276如何学会函数式编程 -
倪阅媚18993569521 ______ 如何学会函数式编程.我的回答是:用你现在使用的编程语言写纯正函数. 纯函数唯一的输入是它的参数,唯一的输出是它的返回值.如果你以前从未接触过这个概念,你会以为所有的函数都是纯正的.毕竟,所有的函数都是接受一个或多个输...

(编辑:自媒体)
关于我们 | 客户服务 | 服务条款 | 联系我们 | 免责声明 | 网站地图 @ 白云都 2024