如果没有,我如何优化以下内容?

时间:2019-09-22 17:57:29

标签: java if-statement

我有以下if else块。

<div id="app-container">
    <iframe width="500" height="500" src="https://beta.app.com"></iframe>
</div>

代码看起来很笨拙。有什么办法可以优化它。

5 个答案:

答案 0 :(得分:3)

一种奇特的方法是使用三元运算符。但这与使用if级联没有什么不同,但是是单个分配(如果outputfinal,则很方便,尽管即使在这种情况下也并非绝对必要)。

output = 
  result.first 
    ? (result.last ? "both present" : "first present")
    : (result.last ? "last present" : "none present");

由于有4种可能的结果,因此无法将其降低到log_2(4) == 2个嵌套条件以下。

您还可以使用预定义的查找映射。

答案 1 :(得分:1)

if (result.first && result.last){
   output= "both present"
} else if (result.last) {
   output= "last present"
} else if (result.first) {
   output= "first present"
} else {
   output = "none present"
}

此外,如果可以的话,可以将逻辑放入“结果”中,那么您就不必“获取”属于结果的东西。如果您将逻辑推得足够远,甚至可以用多态替换if / else。

答案 2 :(得分:1)

使用嵌套的if语句,而不是同时检查两个条件:

if (result.first) {
    if (result.last) {
        output = "both present";
    } else {
        output = "first present";
    }
} else {
    if (result.last) {
        output = "last present";
    } else {
        output = "none present";
    }
}

这很容易导致使用三元条件运算符:

if (result.first) {
    output = (result.last ? "both present" : "first present");
} else {
    output = (result.last ? "last present" : "none present");
}

也可以嵌套:

output = (result.first ? (result.last ? "both present" : "first present")
                       : (result.last ? "last present" : "none present"));

如果要检查的布尔值很多,则深层嵌套会变得很麻烦,因此您可以选择使用位掩码:

private static final String[] OUTPUTS = { "none present", "first present",
                                          "last present", "both present" };
output = OUTPUTS[(result.first ? 1 : 0) + (result.last ? 2 : 0)];

答案 3 :(得分:0)

let myDict = ["key1" : 200.0, "key2" : 180.0]

let randomKey = myDict.keys.randomElement()!
let randomValue = myDict[randomKey]!

答案 4 :(得分:0)

这是我处理类似语句的方法,假设result是一个对象,并且具有两个原始布尔成员(请记住,在“ big”布尔中可能为null){{1 }}和first使用getter方法

last

让我们在public class Result { private boolean first; private boolean last; //getters, constructor etc } 中包装条件,并将其放入map中,其中key为谓词,value为期望值:

Predicate

然后您可以通过以下方式使用它:

private final static Predicate<Result> = RESULT_1-> result.getFirst() && result.getLast();
private final static Predicate<Result> = RESULT_2 -> !result.getFirst() && result.getLast();
private final static Predicate<Result> = RESULT_3 -> result.getFirst() && !result.getLast();

private final static DEFAULT_VALUE = "none present";

private final static Map<Predicate<Result>, String> RESULT_MAP = Map.of(
RESULT_1, "both present",
RESULT_2, "last present",
RESULT_3, "first presnt");

当然要给这些变量指名,进行一些提取等操作。在这种方法中,当您必须向代码中添加新条件时,只需向映射中添加新谓词即可。如果您的体积很小,则不必像我展示的那样编写灵活的代码,但是在更复杂的问题中,此方法很适用。