Amu*_*nak 8 java conditional-statements
在我的java应用程序中,我有很多条件决定只有一个动作.我的问题是如何使它看起来很好(我使用NetBeans所以我更喜欢不会被其代码格式化功能破坏的解决方案).我也希望尽可能减少if/else语句的数量,因为我认为它会使它更快.
我的原始代码很乱,所以我制作了一个动作图:
.如果你想玩它,请复制一份.请记住,关于UML 语法的图表并不完美,部分原因是我使用谷歌文档制作它.
这是代码:
if (!config.get("checkForSpecials") || event.isNotSpecial()) {
if (config.get("filterMode").equals("blacklist")) {
if (!itemFilter.contains(event.getItem().getName())) {
item.process();
}
} else if (config.get("filterMode").equals("whitelist")) {
if (itemFilter.contains(event.getItem().getName())) {
item.process();
}
} else {
item.process();
}
}
Run Code Online (Sandbox Code Playgroud)
有两件事我不喜欢它 - 条件不太清楚(特别是当我展开完整的方法名称和配置字符串时),以及进程方法调用有三次这样的事实.
将布尔值分解出来并从方法调用中缓存返回值可以帮助澄清代码.
此外,在逻辑表上绘制所有结果可能会有所帮助.我用这个工具来帮忙.
使用链接工具:
A: config.get("filterMode").equals("blacklist")
B: config.get("filterMode").equals("whitelist")
C: filterContainsName (see below)
Run Code Online (Sandbox Code Playgroud)
该工具制作出来:
(!A && !B) || (!A && C) || (A && !C)
Run Code Online (Sandbox Code Playgroud)
这导致了下面的代码(用小的调整,替换(!A && C)用(B && C)):
boolean filterContainsName = itemFilter.contains(event.getItem().getName());
boolean useBlacklist = config.get("filterMode").equals("blacklist");
boolean useWhitelist = config.get("filterMode").equals("whitelist");
if (!config.get("safeMode") || event.isSafe()) {
if((!useBlackList && !useWhiteList) ||
( useWhiteList && filterContainsName) ||
( useBlackList && !filterContainsName)) {
item.process();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2200 次 |
| 最近记录: |