【菜鸟】学if...else...
时间:2010-09-28 来源:K#
在代码中,经常会见到if...else...语句。它基于一个取不同的值(true/false)的bool,来执行不同的行为。特定的语句总是伴随着特定的数据类型。用到条件语句的地方,常常有bool,反之亦然。
bool是个极其简单的类型,它的值非true即fasle。正因为bool太简单了,懵懵懂懂、一知半解地就用起来了,用到最后可以说是,一塌糊涂、乱七八糟。
我觉得,有必要对它们进行初步地分析及归类。
先从bool说起
你可以定义一个bool变量:
bool flag = true;
也可以通过比较运算符生成一个bool变量:
bool flag = (country == "China");
bool不关可以用在代码块中,它还有更广泛的用途。
有些函数的参数中含有bool:
int Compare(string strA, string strB, bool ignoreCase)
有些函数返回bool:
bool StartsWith(string value)
有些类中含有bool型成员:
public struct Nullable<T> where T: struct
{
private bool hasValue;
}
接着,就可以围绕这个bool写if...else...语句了:
if(flag)
...
else
...
所以,我得出一个结论:if...else...与bool是形影相随的!
我试图对if...else...语句的用法进行分类:
1.处理特殊情况:
在常规情况下,会有一些特殊情况。特殊情况不经常发生,但是的确有可能发生。
比如说:异常
bool ok = ReadFile();
if(!ok)PrintMsg("Cannot read file!");
使用守卫语句,可以提前返回函数:
void Heat()
{
if(temperature>100)return;
temperature += 10;
}
注:由于特殊情况是附加的,所以常常没有else分支。
2.处理不同类型:
当对一个对象集合进行操作时,常常针对不同的类型的对象,要使用不同的处理方式。
比如说:发工资
void PayEveryone(Employee[] emps)
{
foreach(emp in emps)
{
if(emp.Type == "高") emp.Pay(3000);
else if(emp.Type == "中") emp.Pay(2000);
else emp.Pay(1000);
}
}
随着时间、数量的变化的积累,导致状态的改变,即量变引起质变。
比如说:吃饭
void Eat()
{
if(IsMorning())PrintMsg("吃早饭");
else if(IsNoon())PrintMsg("吃午饭");
else if(IsAfternoon())PrintMsg("吃晚饭");
else PrintMsg("吃饭");
}
注:条件语句的各个分支具有等同的粒度。
3.作为控制条件:
在循环语句或者递归函数中,通常用一个bool来控制代码的运行。
比如说:求最大公约数
int GCD(int a, int b)
{
int Remainder;
while(true)
{
if(b == 0)break;
Remainder = a % b;
a = b;
b = Remainder;
}
return a;
}
在冒泡排序中,如果在一次循环中,没有发生任何改变,则可以提前终止。
扩展阅读:
《代码大全》第十五章
《重构》第九章
注:由于本人很菜,堪称菜鸟,如有不妥的地方,请指出,多谢。