JavaRush /Java 博客 /Random-ZH /喝咖啡休息#131。Java 在 Web 和移动应用程序开发中的作用。函数式编程 - 优点和缺点

喝咖啡休息#131。Java 在 Web 和移动应用程序开发中的作用。函数式编程 - 优点和缺点

已在 Random-ZH 群组中发布

Java 在 Web 和移动应用程序开发中的作用

来源:DZone Java 是最常用的编程语言之一。它被积极用于企业、网络和移动应用程序的开发。Java 在从数据科学到 AR/VR 等领先技术行业都有应用。尽管 Java 的企业开发是该语言最流行的用例,但 Web 和移动应用程序也被认为是使用 Java 的领域之一。 喝咖啡休息#131。 Java 在 Web 和移动应用程序开发中的作用。 函数式编程 - 优点和缺点 - 1让我们看一下为什么 Java 开发在过去二十年里在 Web 和移动设备上变得如此流行。在 Web 和移动设备上使用 Java 的主要原因之一是它是一种高性能编程语言。它确保您的应用程序可以快速运行并且没有任何处理错误。还有其他原因:

1. 开源

作为一种开源编程语言,Java 具有许多优点。首先,它降低了应用程序开发过程的成本。其次,由于它是开源的,开发人员很容易改变语言并经常更新。此外,Java 具有易于阅读的语法,可以轻松地为 Web 和移动设备开发应用程序。最后,开发人员可以使用现有的语言代码库并对其进行改进。

2. 跨平台

Java 编程的另一个好处是它是一种跨平台语言。开发人员可以在 Windows 上编写代码并在 macOS 和 Linux 上运行。“编写一次,到处运行”的原则在这里适用。这使得开发人员可以更轻松地在不同系统上工作,并简化在不同机器上进行测试的过程。例如,开发人员可以测试程序是否能够在不同的屏幕尺寸和操作系统上正确运行。

3. 移动友好

Java 是移动应用程序的流行技术。Android应用程序开发人员主要使用Java语言,因为它易于实现、具有安全特性和跨平台功能。Android 需要强大的语言来扩展应用程序,但 Java 提供了惊人的扩展功能。它还简化了 Android 应用程序的测试过程。所有这些都表明它是一种用于创建移动应用程序的可靠且动态的编程语言。

4. 工具和库

Java 最显着的优点之一是它与各种工具的兼容性。Spring、Hibernate、Struts、Spark 等框架极大地简化了开发过程。所有这些工具都提供了用于创建交互式和动态应用程序的各种功能。Apache Commons、Java Standard Libraries、Maven、Jackson 等库允许开发人员添加功能,而无需从头开始编写代码。

5.活跃的社区

全球有超过 760 万 Java 开发人员。他们不断更新编程语言并为其添加新功能。由于Java每6个月更新一次,开发人员有机会快速学习并创造更好的产品。您还可以使用 Java 社区来查找各种问题的答案。

Java 在 Web 应用程序开发中的崛起

自 1995 年由 Sun Microsystems 创建以来,Java 语言已成为编程行业的优先发展方向之一。如今,世界各地的公司都使用这种编程语言来创建 Web 应用程序。Google、Netflix、Spotify 和 Pinterest 只是少数在其技术堆栈中使用 Java 的公司。专家估计,超过 60% 的 IT 公司以某种形式使用 Java。此外,由于它在其他 Web 开发领域(即云计算、社交媒体、企业开发、AR、VR 等)的采用,它仍然是一种流行的编程语言。它是一种优秀而强大的编程语言,适用于现在需要基于云的架构的企业。当与 JavaScript 结合使用时,Java 允许您创建可以在任何平台上运行的高性能 Web 应用程序。

Java 在现代用例中的崛起

除了 Web 开发和移动开发之外,Java 还在现代技术世界中留下了自己的印记。如今,Java 是一种对于科学应用来说非常有用的编程语言。它为科学计算提供了安全、快速和便携的环境。MATLAB 是基于 Java 的科学应用程序中最流行的库之一。
  • Java 在科学应用程序的前端和后端开发中也很有用。您可以使用 Struts 和 Java Server Pages 进行前端开发,使用 Java Core 进行科学应用程序的后端开发。

  • Java 对于数据分析也很有用。它允许开发人员使用各种库和工具创建数据分析解决方案。如今,Java 已在物联网领域得到应用。它是智能卡和传感器等嵌入式系统的关键技术。因此,公司在家庭自动化行业中使用这种编程语言。此外,它还积极用于流媒体设备技术和智能电视的开发。

  • Hadoop大数据平台是用Java编写的。由于它是一种开源且面向对象的语言,因此它是大数据应用程序的基石。像Scala这样的编程语言可以轻松地运行在Java虚拟机上,让大数据分析变得更加容易。

  • 游戏是一个新兴且快速发展的行业,Java 广泛用于各种游戏应用程序。例如,它提供对 jMonkeyEngine(最大的开源 3D 游戏开发引擎)的支持。此外,Dalvik 虚拟机 (DVM) 主要由 Java 支持,用于创建 Android 互动游戏。

函数式编程 - 优点和缺点

来源:Dev.to 尽管我传统上对不熟悉的技术持怀疑态度,但我认识到函数式编程的好处。以下是描述此编程范例的优点的大致列表。 喝咖啡休息#131。 Java 在 Web 和移动应用程序开发中的作用。 函数式编程 - 优点和缺点 - 2

安全并发

函数式方法鼓励安全并发,即能够在单独的线程中运行作业,而不会导致线程冲突或修改冲突。原因是,与对象方法不同,您不共享其状态可以在处理过程中更改的对象。有入口,也有出口,入口不会因你而改变。在Java中,即使你使用“线程安全”的对象,你也不能保证它们在你的方法被调用时具有相同的值。在下面的示例中,我们可以看到一次处理一个元素的循环可以使用线程内的 lambda 函数轻松并行处理。
for( String item : items ) {
   process(item);
}
现在变成了:
items.parallelStream().forEach( item -> process(item) );

快速输入/输出

函数式编程支持与多线程不同的方法。这意味着我们不再有单独的线程等待 I/O 响应,例如数据库调用。也就是说,我们最大化 CPU 和带宽的使用。对于高性能应用程序来说,这是一个明显的优势。这是通过函数调用可以返回 Future 来实现的,它不是调用的实际结果,而是在未来某个时刻返回结果的承诺。在未来的某个时刻,将获得运行该函数的返回值。这意味着处理器线程不会等待数据库或 REST 调用完成,而是可以执行其他操作。

表达简洁

软件开发人员希望能够优雅地表达复杂的想法。函数式编程可以让你简洁地做到这一点。例如,诸如 for 循环之类的常见构造可以用线程替换,线程抽象了使用循环的常见 for 操作。毫无疑问,Java 中添加 Lambda 函数和线程扩展了表达以前不可能的想法的能力。

为什么不成为功能性的?

只是重申一下上面的内容:函数式编码有很多好处,因此本文并不是试图将所有内容概括为一种情况,并说您绝对应该进行函数式编程,反之亦然。必须在清楚了解过渡的原因和潜在问题的情况下做出这一决定。

总是很难直观地理解

当你写代码时,你是否试图与计算机进行通信?如果与计算机的通信对您来说如此重要,为什么不用机器代码编写呢?当然,这是非常困难的,因此发明了计算机语言以使其变得更容易。它们还允许程序员创建其他程序员可以理解的表达式。随着软件变得越来越大、越来越复杂,我们需要策略来管理复杂性。我们通过抽象和信息隐藏来实现这一点。在 Java 中用于发送电子邮件的类相当复杂,但该类的接口很简单。它隐藏了详细的实现,只向我们展示了控件的外部。大括号和方括号等语言功能告诉我们条件语句和循环等结构。只是现在我们将循环(或者更确切地说是递归)和条件移动到函数中:
for( String item : items ) {
    System.out.println(item);
}
事实证明:
items.foreach( item -> System.out.println(item) );
流式传输和 lambda 方法肯定更短。您可以用更少的代码来表达相同的功能。问题是我们现在将实际行为隐藏在我们需要知道的方法中。Java 中的循环使用关键字。另一方面,lambda 函数可以实现各种形式的递归,这里仅通过名称表明它的作用。例如:
boo.fooble( item -> System.out.println(item) );
你不能再仅仅通过阅读代码来理解结构。这使得跟踪执行流程变得困难。另一个功能是函数链,其中一个函数的结果是下一个函数的输入,而不分配中间变量。
boolean result = boo
    .fooble( /*some code*/ )
    .bobble( /*some code*/)
    .goober( /*some code*/);
这对于这段代码的作者来说可能是有意义的,因为他似乎已经编写了每个函数并且知道它的作用。然而,对于那些刚接触代码的人来说,这并没有告诉你太多关于每个函数的参数、过程或返回值的信息。但是,如果您在分配类型的内容中编写相同的内容,您将得到:
Car car = boo.fooble( /*some parameters*/);
Tyre tyre = car.bobble( /*some parameters*/);
int pressure = tyre.goober( /*some parameters*/);
这可能不是一个完美的类比,因为参数和匿名函数不是同一件事,但这里的要点是,如果不更深入地理解下面描述的函数的作用,那么结果和参数未知的长句子很难阅读。因此,函数式编程可能在令人惊讶的短代码段中具有很高的表达能力,但对于刚接触该软件的人来说却难以理解。类和接口的目的是隐藏数据,创建可重用的代码片段,不需要开发人员理解甚至不需要查看实现。它们的存在是为了让开发人员可以轻松地处理大型、复杂的系统。这是组织与特定实体关联的代码的便捷方法。然而,我对函数式编程如何帮助构建大型复杂项目知之甚少。这可能有主观原因。

用你的技能给别人留下深刻印象

一些软件开发人员对自己的技能非常缺乏信心,以至于他们试图通过编写不必要的复杂代码来给人留下深刻的印象。作为一名高级开发人员,我并不特别钦佩其他尝试编写智能代码的软件开发人员。当然,这不仅仅适用于函数式编程;还适用于函数式编程。同样的事情可能发生在任何编码风格中。但我注意到函数式编程支持者中存在一定的智力虚荣心。关键是软件开发人员并不是在真空中工作。这种“智能”代码需要维护,如果难以理解,那么将难以阅读和更改,并且难以调试。在管理团队时,我们有各个级别的人员,因此最明智的做法是以每个参与人员都能理解的方式编写代码。这就是为什么我们有明确的长变量名,因此我们限制方法的长度。“聪明”的代码会占用额外的时间,所以写起来并不是很聪明。我相信函数式编程使用了 Perl 多年前提出的关于简洁而强大的表达式的相同论点。Perl 的支持者对其表现力感到自豪,他们可以用几行代码编写出非常强大的程序。这是真的。问题是它们很难理解。也许函数式编程也陷入了同样的陷阱。

因为它是一种新时尚

总是有“热门”的新技术或范例。新技术、语言和方法不断涌现。我们必须不断挑战自我,学习新事物。作为软件开发人员意味着先进的技术。但作为软件开发人员,我们必须自己评估创建产品需要哪些技术。仅仅因为一项新的流行技术流行就去学习它并不是明智的时间利用方式。这并不意味着您不应该学习函数式编程,而是您应该针对您正在编写的应用程序评估此范例的优缺点。

因为这是唯一正确的方法

以前很多次,我看到开发人员将这种或那种方法宣传为唯一正确的方法。但正如一位朋友告诉我的,不同的工作需要不同的工具。例如,我个人使用Python和PyTorch进行人工智能,尽管还有很多其他工具和技术,各有其优缺点。有充分的理由将函数式编程视为需要显着可扩展性的服务的一种选择。这是由于这种方法提供的并发安全性。但您也应该意识到成本和潜在风险。几年前,我在依赖注入方面也有过类似的经历,Spring 被认为是这项工作的最佳选择。当我问 Spring 支持者它带来什么好处时,他们没有给我明确的答案。我现在在一些函数式编程纯粹主义者身上看到了类似的情况,他们似乎正在从事某种宗教运动,而不是对技术进行公正的评估。顺便说一句,依赖注入是一个好主意,我现在可以清楚地识别它的好处。同样,我认为我对函数式编程的担忧与它的使用方式有关,而不是它是否是一种有用且有效的方法。

结论

本文的目的不是为是否应该进行函数式编程的问题提供明确的答案。关键是你如何评估任何新技术或方法。最重要的是:不要让你的自我阻碍你进行客观评估。软件开发并不能证明您的智力或个人品质。这是关于在现实世界中创造价值。如果函数式编程对您有帮助,那么就使用它。
评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION