我想知道我是否可以压缩我的if控制块:
//HUNGER
if(hungerLvl > 0){
hunger = "Peckish";
}
if(hungerLvl > 50){
hunger = "Very Hungry";
}
if(hungerLvl > 80) {
hunger = "Starving";
}
对于这样的事情:
if(hungerLvl > 0; hungerLvl > 50; hungerLvl > 80) {
}
答案 0 :(得分:0)
我非常喜欢使用数据结构+循环而不是重复代码。也就是说,这可能会增加有时候不值得的复杂性。
您发布的内容看起来很容易阅读,因此可能不值得大惊小怪。但是,如果您最终可能会遇到数十个或数百个条件,那么数据结构+循环将为您提供更好的服务。
这是一个完整的工作示例,使用相同的值。关键方法-rewards_tracker_type character varying DEFAULT 'rewards_tracker'::character varying,
+rewards_tracker_type character varying DEFAULT 'rewards_tracker'::text,
既不比3范围示例更紧凑也更易读。但是,如果你进入10或20个条件,那么这个,恕我直言,将更易于维护和更具可读性。
howHungry
答案 1 :(得分:0)
除了普通的“if”之外还有其他一些方法 - 但是他们中的大多数仍然在引擎盖下使用它(如果你喜欢你可以google例如chain of responsibility pattern)但是在你的情况下它只会是过于复杂,你将不得不写更多,更不易读的代码。 所以我认为在这个特殊情况下'if'语句是要走的路。
如果你担心速度,那么你可能应该看看你做变量赋值的次数(如果你经常检查hungerLvl就可能很重要):
//HUNGER
if(hungerLvl > 0){
hunger = "Peckish";
}
if(hungerLvl > 50){
hunger = "Very Hungry";
}
if(hungerLvl > 80){
hunger = "Starving";
}
在您的代码中,无论先前结果如何,都会执行每个值检查。因此,如果hungerLvl等于例如92,那么首先检查hungerLvl> 0将发生,然后饥饿将被赋予“Peckish”的值,然后它将检查下一个if语句,进行下一个赋值,然后它最终将检查最大值并进行最终赋值。 所以你有三个作业而不是最后一个作业。
为了防止这种情况,您可以使用'if else'块并略微更改逻辑表达式(我假设hungerLvl不能低于0 - 如果可以,它会产生一些差异,您将不得不添加额外的检查在开始):
if(hungerLvl <= 50){
hunger = "Peckish";
} else
if(hungerLvl <= 80){
hunger = "Very Hungry";
} else
{
hunger = "Starving";
}
请注意,现在如果第一个语句为true,那么'if else'块中'else'之后的所有内容都将被忽略。此外,如果hungerLvl的值更大,例如92,那么它将执行更低值的检查,但不会进行任何分配,因为检查将返回false。
奖励点是,如果值不低于50或80,那么我们不必检查它是否更高,所以我们有一个if语句更少。
答案 2 :(得分:0)
你可以这样写:
hunger = hungerLvl > 80 ? "Starving"
: hungerLvl > 50 ? "Very Hungry"
: hungerLvl > 0 ? "Peckish"
: hunger; // or null, or whatever