天下文章一大抄, 编程语言也是
Posted on Fri 22 November 2024 in Journal
Abstract | 天下文章一大抄, 编程语言也是 |
---|---|
Authors | Walter Fan |
Category | learning note |
Status | v1.0 |
Updated | 2024-11-22 |
License | CC-BY-NC-ND 4.0 |
- 1. 文本块(Text Blocks)
- 2. 记录类(Records)
- 3. 模式匹配(Pattern Matching)
- 4. var 关键字
- 5. 增强的 switch 表达式
- 6. 增强的集合 API
- 7. 流式 API(类似 Python 的生成器和列表推导式)
- 总结
天下文章一大抄, 编程语言也是这样, 最近在看 JDK11 以来引入的一些新特性, 总有似曾相识的感觉, 不少地方干脆就是从 Python 中抄过来的. 随着编程语言的发展, 大家相互借鉴, 你抄我, 我抄你, 挺有意思. 我反正挺高兴的, 学习成本几乎为零.
Java 在最近几个 JDK 的更新(如 JDK 17、19、21 等)中确实吸取了其他语言的设计灵感,尤其是 Python 的简洁性和易用性,增加了许多现代化特性。
1. 文本块(Text Blocks)
类似于 Python 的多行字符串(Triple-Quoted Strings)
JDK 引入版本:JDK 13(预览) -> JDK 15(正式)
功能:
- 在 Java 中,处理多行字符串曾是个麻烦事,需要手动拼接或使用复杂的转义字符。
- 新增的文本块特性让多行字符串更加易读,类似 Python 的 """。
示例:
Python:
query = """
SELECT *
FROM users
WHERE id = 1
"""
Java:
String query = """
SELECT *
FROM users
WHERE id = 1
""";
优点:
- 自动处理换行。
- 支持嵌套复杂的文本内容。
2. 记录类(Records)
类似于 Python 的数据类(Dataclasses)
JDK 引入版本:JDK 14(预览) -> JDK 16(正式)
功能:
- 提供一种轻量级的类定义方式,用于仅包含数据的对象。
- 自动生成构造器、equals()、hashCode() 和 toString() 方法。
示例:
Python:
from dataclasses import dataclass
@dataclass
class Point:
x: int
y: int
Java:
record Point(int x, int y) {}
优点:
- 大幅减少样板代码。
- 清晰表达“不可变数据对象”的意图。
3. 模式匹配(Pattern Matching)
类似于 Python 的结构模式匹配(Structural Pattern Matching)
JDK 引入版本:
- instanceof 模式匹配:JDK 16
- switch 表达式模式匹配:JDK 17 和后续版本(逐步扩展中)
功能:
- 提升 instanceof 和 switch 的能力,支持基于类型或值的模式匹配。
- 和 Python 的 match-case 十分类似。
示例: Python:
def process(obj):
match obj:
case int():
print("It's an integer")
case str():
print("It's a string")
case _:
print("Unknown type")
Java:
void process(Object obj) {
switch (obj) {
case Integer i -> System.out.println("It's an integer: " + i);
case String s -> System.out.println("It's a string: " + s);
default -> System.out.println("Unknown type");
}
}
优点:
- 代码更加简洁和易读。
- 减少了手动类型检查和强制转换的繁琐操作。
4. var 关键字
类似于 Python 的动态类型推断
JDK 引入版本:JDK 10
功能:
- 用 var 声明变量,编译器会自动推断其类型。
- 尽管 Java 仍是强类型语言,但这使代码风格更加简洁,类似 Python 的动态类型。
示例: Python:
x = 42
name = "Alice"
Java:
var x = 42;
var name = "Alice";
优点:
- 减少了显式类型声明的冗余。
- 提高代码的可读性,特别是在复杂类型声明时。
5. 增强的 switch 表达式
类似于 Python 的表达式式结构
JDK 引入版本:JDK 12(预览) -> JDK 14(正式)
功能:
- switch 语句支持返回值。
- 语法更简洁,支持箭头语法。
示例: Python:
def get_day_name(day):
return {
1: "Monday",
2: "Tuesday",
3: "Wednesday"
}.get(day, "Unknown")
Java:
String getDayName(int day) {
return switch (day) {
case 1 -> "Monday";
case 2 -> "Tuesday";
case 3 -> "Wednesday";
default -> "Unknown";
};
}
优点:
- 可直接返回值,减少代码行数。
- 避免 break 的冗余操作。
6. 增强的集合 API
类似于 Python 的内置集合操作
JDK 引入版本:
- List.of(), Set.of(), Map.of():JDK 9
- Collectors.toUnmodifiableList():JDK 10
功能:
- 更方便地创建和操作不可变集合。
- 类似于 Python 的列表和字典字面量语法。
示例: Python:
fruits = ["apple", "banana", "cherry"]
Java:
List<String> fruits = List.of("apple", "banana", "cherry");
优点:
- 简化集合初始化代码。
- 默认创建不可变集合,提高安全性。
7. 流式 API(类似 Python 的生成器和列表推导式)
Java 的流式 API 类似于 Python 的生成器和列表推导式,能简化对集合的操作。
示例: Python:
squared = [x**2 for x in range(5) if x % 2 == 0]
Java:
List<Integer> squared = IntStream.range(0, 5)
.filter(x -> x % 2 == 0)
.map(x -> x * x)
.boxed()
.toList();
总结
特性 | Python 类似特性 | 引入版本 | 优点 |
---|---|---|---|
文本块(Text Blocks) | 三引号字符串 | JDK 15 | 多行字符串更易读 |
记录类(Records) | 数据类(Dataclasses) | JDK 16 | 减少样板代码,表达数据意图 |
模式匹配(Pattern Matching) | match-case | JDK 17+ | 强大的类型和值匹配 |
var 关键字 | 动态类型推断 | JDK 10 | 提高简洁性 |
增强的 switch 表达式 | 表达式式结构 | JDK 14 | 更简洁、更强大 |
集合 API | 列表/字典字面量 | JDK 9+ | 简化集合操作 |
流式 API | 生成器、推导式 | JDK 8+ | 简化集合处理 |
Java 作为一门大龄编程语言, 依然保持着旺盛的生命力, 不断迭代更新, 始终在演进的路上. 我这样一个大龄程序员, 也始终在学习的路上, 此生也有涯, 而知也无涯, Keep Moving...
本作品采用 AI 辅助创作