Java 是否存在过多嵌入if语句的情况?
目前我正在编写一段代码(我相信)需要相当多的嵌入式if语句。对于要嵌入多少if语句,是否有一些标准?我在谷歌上搜索的大部分内容都是关于excel的,我不知道为什么 如果有标准,为什么?它是为了可读性,还是为了让代码运行更顺畅?在我看来,主要是为了可读性,这是有道理的 我的if结构的一个示例:Java 是否存在过多嵌入if语句的情况?,java,coding-style,if-statement,Java,Coding Style,If Statement,目前我正在编写一段代码(我相信)需要相当多的嵌入式if语句。对于要嵌入多少if语句,是否有一些标准?我在谷歌上搜索的大部分内容都是关于excel的,我不知道为什么 如果有标准,为什么?它是为了可读性,还是为了让代码运行更顺畅?在我看来,主要是为了可读性,这是有道理的 我的if结构的一个示例: if (!all_fields_are_empty): if (id_search() && validId()): // do stuff else 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
如果(!所有字段为空):
如果(id_search()&&validId()):
//做事
否则,如果(名称搜索):
如果(名称_存在):
如果(匹配<1):
//做事
其他:
//做事
否则如果(名称搜索类型2):
如果(存在):
如果(匹配<1):
//做事
其他:
//做事
其他:
//你真蠢
我听说有2-3个嵌套for/while循环的限制,但是if语句有什么标准吗
更新:
我现在有好几年的时间了。请不要使用这么多
if
语句。如果你需要这么多,你的设计可能很糟糕。今天,我喜欢用最少的if
语句或switch
案例找到一种优雅的方式来做这些事情。代码最终变得更干净、更易于测试和维护。通常。Java中嵌套if/else块数量的唯一技术限制可能是堆栈的大小。风格是另一回事
顺便说一句:冒号有什么用?我不认为有限制,但我不建议嵌入更多的冒号和冒号,因为它们太难阅读、调试和单元测试。考虑一下两本很棒的书,也许是
技术上,我不知道对嵌套有什么限制。
如果你发现自己做得很深,这可能是一个糟糕设计的指标 您发布的一些内容看起来更适合用作案例
语句
我关心的是可读性,以及下一个人的代码维护,这意味着即使是第一个人(你)也很难从一开始就把它做好
编辑:
你也可以考虑使用一个类,比如“代码> Sexabable Objor())< /C>。您可以使用通用功能创建此类的基类,然后继承ID、名称等,这样顶级控制块将大大简化。
从技术上讲,您可以拥有任意数量的控制块,但如果拥有大量控制块,则会很快使代码无法读取 我通常会这样做:if(all_fields_are_empty) {
abuseuser;
return;
}
if(id_search() && validId()) {
//do stuff
return;
}
if(name_search)
{
if(name_exists)
//do stuff
return
else
//do stuff
return
}
我相信您已经明白了正如Randy所提到的,在大多数情况下,这种代码的原因是应用程序设计不佳。通常我会尝试在您的案例中使用“processor”类 例如,假设有一个名为“operation”的通用参数和30个具有不同参数的不同操作,您可以创建一个接口:
interface OperationProcessor {
boolean validate(Map<String, Object> parameters);
boolean process(Map<String, Object> parameters);
}
当然,这只是一个例子,您的项目需要一个稍微不同的方法,但我想它可能与我描述的类似;Dr任何一种方法都不需要超过10-15条路径 你在这里指的是什么 圈复杂度是一种软件度量(度量),用于 表示程序的复杂性。这是一个定量的衡量标准 通过程序源的线性独立路径数 代码。它是由老托马斯·麦卡贝于1976年开发的 因此,每个if语句都可能是代码中的一条新路径,并增加了它的圈复杂度。有一些工具可以为您衡量这一点,也有一些高复杂性的高亮度区域可以进行潜在的重构 对于要嵌入多少if语句,是否有一些标准 是的,也不是。人们普遍认为(McCabe自己也认为,圈复杂度超过10或15太高了,这是代码应该重构的标志 McCabe最初的一个应用是限制 程序开发期间的例行程序;他建议程序员 应计算他们正在开发的模块的复杂性,以及 只要 模块超过10。[2]NIST采用了这种做法 结构化测试方法,观察到 McCabe的原始出版物《10的数字》已经收到 大量确凿的证据,但在某些情况下 可适当放宽限制,并允许模块具有 复杂度高达15。正如方法论所承认的那样 如果是偶然的原因超出了约定的限制,那么 将其建议表述为:“对于每个模块 圈复杂度达到[约定极限]或提供书面 解释超出限制的原因。”[7] 但这并不是一条硬性规定,在某些情况下可以忽略。看这个问题 为什么??是为了可读性,还是为了让代码运行得更快 顺利 本质上,这是为了可读性,这将使您的代码运行平稳。引用 任何傻瓜都能写出计算机能理解的代码。好 程序员编写人类能够理解的代码
我只是很快地输入了一些东西,作为if结构的示例。我想,我的python经验中有一部分是出来的。可能的重复:我不是问有多少是最大值,我是问程序员的标准是什么。程序员之间没有“标准”最大值。每种情况都有自己的嵌套最大值。例如,如果你有一些繁重的数学代码,它会做一些可怕的计算——我会很容易地使用15个嵌套的if,而不会有任何问题
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"));
}
}
public void init() {
this.processors = new HashMap<String, OperationProcessor>();
this.processors.put("print",new PrinterProcessor());
this.processors.put("name_search", new NameSearchProcessor());
....
}
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");
}