如何在if条件中对模式匹配语句进行取反操作?
是否能在if条件中对模式匹配取反?
使用模式匹配时,很容易写出这类条件判断:
if (json case {"data": final Map data, "changed": final List changed} when changed.isNotEmpty) { // 在这里使用data和changed处理逻辑 }
但如果要叠加多个模式判断,嵌套写法会让代码可读性下降。你想要用模式守卫子句实现类似取反后提前返回的逻辑,比如:
if (NOT json case {"data": final Map data, "changed": final List changed} when changed.isNotEmpty) { return; } // 后续直接使用data和changed处理逻辑
目前没有直接的NOT关键字,但可以通过**括号包裹整个模式匹配表达式并添加取反运算符!**来实现需求,修改后的代码如下:
if (!(json case {"data": final Map data, "changed": final List changed} when changed.isNotEmpty)) { return; } // 此时模式匹配已成立,可安全使用data和changed // ... 在这里处理data和changed的逻辑
这种写法既实现了对模式匹配+守卫条件的取反,避免了嵌套,同时保持代码的可读性。如果需要组合多个模式的取反判断,也可以用逻辑运算符拼接:
if (!(json case {"data": final Map data, "changed": final List changed} when changed.isNotEmpty) || !(json case {"error": final String error})) { return; }
内容的提问来源于stack exchange,提问作者offworldwelcome
相关产品推荐
相关产品推荐

