我是C#的新手,当我有许多if语句时,我不确定如何优化代码。 所以到现在为止
if (input.Contains("triangle"))
{
if (input.Contains("rectangular"))
{
}
else if (input.Contains("isosceles"))
{
}
else if (input.Contains("equilateral"))
{
}
}
我不确定该怎么做。
是否有更好的方法来减少if语句?
答案 0 :(得分:0)
给定的代码已经适合其目的。这里不需要过早的优化。但是,我将为您提供有关if语句何时需要改写的想法。
示例问题:
验证输入。有效输入不得包含空格或点。除7外,也允许数字。
不太好的代码:
bool validate(String str) {
// "!" is read as "not". True becomes false, and vice-versa
if (!(str.Contains(" "))){
if (!(str.Contains("."))){
if (!(str.Contains("7"))){
Console.WriteLine("Success");
return true;
}
}
}
return false;
}
这就是您所说的嵌套条件。太多的嵌套if语句可能是真正的 eyesore ,那就是您要对其进行修复的时候。尽管嵌套的if语句并不总是很糟糕,但是考虑分离的方法通常是个好主意,这样就不会使主代码缩进。 (在这种情况下,您可能会争辩使用“ ||”(“或”运算符)或“ &&”(“与”运算符)将条件组合为一个if语句。这没有错,但是在更复杂的逻辑中,您会通常希望将条件分开以便于调试。)
稍好一些的代码:
bool validate(String str) {
// "!" is read as "not". True becomes false, and vice-versa
bool isValid = true;
if (str.Contains(" ")){
isValid = false;
}
if (str.Contains(".")){
isValid = false;
}
if (str.Contains("7")){
isValid = false;
}
if (isValid){
Console.WriteLine("Success");
}
return isValid;
}
另一种策略是使用提早退出。 基本上,这意味着首先检查不需要的情况,如果发现这种情况,请立即返回false。
更好的代码:
bool validate(String str) {
// Since we are checking for unwanted cases, we won't use the not operator
if (str.Contains(" ")){
return false;
}
if (str.Contains(".")){
return false;
}
if (str.Contains("7")){
return false;
}
// You could also do
// if (str.Contains(" ") || str.Contains(".") || str.Contains("7")) if you want
// Notice how the main code is not within any if-statement
Console.WriteLine("Success");
return true;
}
结论:
避免不必要的嵌套条件
可能的情况要分开。
利用提前退出
许多if语句都可以,特别是如果您的程序需要处理许多情况时。不要花75%的时间来尝试过早的优化,否则会产生偏执。如果对if语句进行更改,不会导致速度差异很大。但是,使它们更整洁确实会给程序员阅读您的代码(可能包括您)带来很大的不同。