1.1 Java怎么还在变

编程语言就像生态系统一样,新的语言会出现,旧语言则被取代,不同的语言有不同的适用方面。

  • C和C++运行时占用资源少,常用于构建操作系统和各种嵌入式系统;但构建的程序安全性不佳,容易导致程序意外崩溃,暴露安全漏洞;
  • Java和C#等安全型语言常用于业务应用开发;

在过去15年的时间里,Java使用占比较高,编程语言的流行度详见TIOBE排行榜

1.1.1 Java在编程语言生态系统中的位置

编程语言始终聚焦于更快、更为简洁、更易于维护的方式解决现有或者新的编程问题。

  1. 早期支持互联网applet和嵌入式应用,使Java在市场中占有一席之地;
  2. 随着机器性能提高,程序员时间更为宝贵,加上面向对象模型的大受欢迎,Java变得更为流行;
  3. Java编译成JVM字节码,一次编写,到处运行,扩展支持Scala或Groovy运行;

Java 8提供了更多的编程概念和工具,下面探讨三个编程概念背后的思想:

  1. 流处理;
  2. 行为参数化;
  3. 纯函数;

1.1.2 流处理

流是一系列数据项,一次只生成一项。

程序从输入流中读取数据项,处理后将数据项写入输出流。

一个程序的输出流可以作为另一个程序的输入流。

Linux/Unix中的管道|,连接指令,起始从标准输入stdin读取数据,最终把结果写入标准输出stdout。

例如cat file1 file2 | tr "[A-Z]" "[a-z]" | sort | tail -3

Java 8在java.util.stream中添加了Stream API,通过方法链接,形成复杂的流水线。

1.1.3 用行为参数化把代码传递给方法

在Unix示例中,基于sort命令使用自定义排序。

Java8之前,定义一个新类,实现排序方法,使用新类对象排序。

class Xxx {
    public int compareUsingCustomerId(String inv1, String inv2) {
    
    }
}
  1. 使用函数引用Xxx::compareUsingCustomerId;
  2. 若函数只使用一次,写成lambda表达式使用;

1.1.4 并行与共享的可变数据

纯函数/无副作用函数/无状态函数:不修改共享的可变数据,方便并行处理。

因为同步迫使代码按照顺序执行,与并行处理的宗旨相悖。

行为参数化和没有共享的可变数据是函数式编程范式的基石。

1.1.5 Java需要演变

Java的演变:

  1. 引入泛型,使用List而不只是List,能在编译时发现更多错误,且代码更易读;
  2. 使用for-each循环,而不用暴露Iterator迭代器写法;
  3. Java8的函数式编程,以及Stream API。

Java 8的演变反映了从之前侧重改变现有值的经典面向对象思想,转向函数式编程领域

语言需要不断改进以跟进硬件的更新或满足程序员的期待。

引用

  1. TIOBE排行榜
posted @ 2023-06-10 16:45  蒋智  阅读(14)  评论(0)    收藏  举报