“优雅处理空值判断”在不同语言/场景里侧重点不同,我按通用原则 + 主流语言示例来讲,你可以按需取用。
不优雅:if (x != null) { if (y != null) { ... } }
优雅:if (x == null) return; if (y == null) return;
用“类型系统”代替运行时判断
给“空”一个明确语义
只在边界处理 null,业务内部信任非空
❌ 不优雅
if (user != null) {
if (user.getAddress() != null) {
System.out.println(user.getAddress().getCity());
}
}
✅ Optional(推荐)
Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.ifPresent(System.out::println);
✅ 默认值
String city = Optional.ofNullable(user)
.map(User::getAddress)
.map(Address::getCity)
.orElse("未知");
✅ 工具类(Apache / Guava)
String name = Objects.toString(user.getName(), "");
user?.address?.city?.let {
println(it)
}
安全调用 + 作用域函数,基本告别 null 判断。
✅ 用 or 给默认值
name = user.get("name") or "匿名"
✅ 用 get 避免 KeyError
city = user.get("address", {}).get("city")
✅ 类型提示 + Optional
from typing import Optional
def get_city(user: Optional[dict]) -> str:
return user.get("city", "")
✅ 可选链(现代最优雅)
const city = user?.address?.city;
✅ 默认值
const name = user?.name ?? "匿名";
✅ TS 非空断言(谨慎)
const city = user!.address!.city;
var city = user?.Address?.City ?? "未知";
interface Logger {
void log(String msg);
}
class NoOpLogger implements Logger {
public void log(String msg) {}
}
业务代码永远不判空
class User {
private List<Role> roles = new ArrayList<>();
}
if (param == null) throw new IllegalArgumentException("参数不能为空");
优雅处理空值 = 少判空 + 早返回 + 用语言特性 + 用类型/设计代替判断
如果你有具体语言或业务场景(比如 Java 后端 / 前端表单 / 数据库结果),我可以直接给你“实战模板”。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。