具有多重比较的更清晰的 if 语句 [已关闭]

2022-09-01 12:18:36

当你有很多术语时,下面的语句看起来非常混乱:

if(a.equals("x") || a.equals("y") || a.equals("z") || Any number of terms...... )
    //Do something

有没有一种更干净的方式来执行相同的操作,我希望我的代码尽可能可读。

注意:x、y 和 z 只是任意长度的任何字符串的占位符。这里可能有 20 个可变长度的字符串项,如果条件每个条件都是 OR'd 在一起


答案 1

你认为它看起来“不干净”吗?

如果你有一堆复杂的布尔逻辑,你可以将其的不同部分分成单独的布尔变量,并在if语句中引用它们。

或者,您可以创建一个函数,该函数采用“a”变量并返回布尔值。你只是在方法中隐藏你的逻辑,但它会清理你的if语句。


答案 2
Set<String> stuff = new HashSet<String>();
stuff.add("x");
stuff.add("y");
stuff.add("z");
if(stuff.contains(a)) {
    //stuff
}

如果这是一个紧密循环,则可以使用静态 Set。

static Set<String> stuff;
static {
    stuff = new HashSet<String>();
    stuff.add("x");
    stuff.add("y");
    stuff.add("z");
}

//Somewhere else in the cosmos

if(stuff.contains(a)) {
    //stuff
}

如果你想特别确定在你不看的时候没有任何东西被修改。

Set<String> test = Collections.unmodifiableSet(new HashSet<String>() {
        {
            add("x");
            add("y");
            add("z");
        }
    });

如果您只想为一些硬编码条件获取一些逻辑,那么其中一个开关或 if 语句与换行符解决方案可能更好。但是,如果您有很多条件,那么将配置与逻辑分开可能是件好事。


推荐