Cod*_*ody 6 java if-statement coding-style
目前我正在研究一些代码(我相信)需要相当多的嵌入式if语句.嵌入多少if语句是否有一些标准?我的大部分谷歌搜索都发现了处理excel的事情.不知道为什么.
如果有标准,为什么?它是为了可读性还是让代码运行得更顺畅?在我看来,它主要是为了可读性.
我的if结构的一个例子:
if (!all_fields_are_empty):
if (id_search() && validId()):
// do stuff
else if (name_search):
if (name_exists):
if (match < 1):
// do stuff
else:
// do stuff
else if (name_search_type_2):
if (exists):
if (match < 1):
// do stuff
else:
// do stuff
else:
// you're stupid
Run Code Online (Sandbox Code Playgroud)
我听说有2-3个嵌套for/while循环的限制,但是if语句有一些标准吗?
更新:
我现在有几年了.请不要使用这么多的if陈述.如果你需要这么多,你的设计可能很糟糕.今天,我喜欢当我能用最少的if陈述或switch案例找到一种优雅的方式来做这些事情.代码最终更清晰,更容易测试,更易于维护.一般.
正如Randy所提到的,这种代码的原因在大多数情况下是应用程序的糟糕设计.通常我会尝试在你的情况下使用"处理器"类.
例如,假设存在一些名为"operation"的通用参数和30个具有不同参数的不同操作,则可以创建一个接口:
interface OperationProcessor {
boolean validate(Map<String, Object> parameters);
boolean process(Map<String, Object> parameters);
}
Run Code Online (Sandbox Code Playgroud)
然后为您需要的每个操作实现大量处理器,例如:
class PrinterProcessor implements OperationProcessor {
boolean validate(Map<String, Object> parameters) {
return (parameters.get("outputString") != null);
}
boolean process(Map<String, Object> parameters) {
System.out.println(parameters.get("outputString"));
}
}
Run Code Online (Sandbox Code Playgroud)
下一步 - 在初始化应用程序时,在一些阵列中注册所有处理器:
public void init() {
this.processors = new HashMap<String, OperationProcessor>();
this.processors.put("print",new PrinterProcessor());
this.processors.put("name_search", new NameSearchProcessor());
....
}
Run Code Online (Sandbox Code Playgroud)
所以你的主要方法变成这样:
String operation = parameters.get("operation"); //For example it could be 'name_search'
OperationProcessor processor = this.processors.get(operation);
if (processor != null && processor.validate()) { //Such operation is registered, and it validated all parameters as appropriate
processor.process();
} else {
System.out.println("You are dumb");
}
Run Code Online (Sandbox Code Playgroud)
当然,这只是一个例子,你的项目需要一些不同的方法,但我想它可能与我所描述的类似.
从技术上讲,我不知道嵌套有任何限制。
如果你发现自己走得很深,这可能表明设计很糟糕。
您发布的一些内容看起来可能更适合作为声明case。
我会关心下一个人的可读性和代码维护,这实际上意味着即使对于第一个人(你)来说,一开始就很难把事情做好。
编辑:
您也可以考虑开设类似的课程SearchableObject()。您可以创建一个具有通用功能的基类,然后继承 ID、名称等,并且这个顶级控制块将大大简化。
| 归档时间: |
|
| 查看次数: |
10046 次 |
| 最近记录: |