判断是个很简单的概念:如果是________,就________;如果不是________,就________。就是“分情况讨论”。
我们日常生活中对此应用广泛,比如:
比如你下班回家的路上,妈妈一通电话,“儿砸,去菜市场问问排骨多少钱,如果35块以下就买3斤,如果35块以上就算了”。
这其实就是一个判断。
1.改道前往菜市场;
2.询问排骨价格;
3.判断排骨价格:
如果排骨价格小于等于35块,购买3斤
如果排骨价格大于35块,不购买
5.回家。
在C#中,我们可以通过if-else进行排骨价格的判断
//获得一个“市场”实例对象 Market market = new Market("菜市场"); string ribs = "排骨"; var price = market.GetPrice(ribs); if (price <= 35) { //购买排骨 market.Buy(ribs, 3); } else { //什么都不做,这个else代码段可以不写 }
在这里,我们创建了一个“Market”类,来定义关于“菜市场”的一切行为(询问价格、购买等)。
if-else
if-else可以嵌套使用,再结合逻辑运算符,可以进行复杂的判断。 if-else的教程有if 语句、if...else 语句 、嵌套 if 语句 。
逻辑运算符包括&&(取并)、||(取交)、!(取非),这里和数学中的意义是一样的。详细可以看C# 运算符的逻辑运算符部分。
比如,妈妈的指令更复杂一些,“去菜市场看看有没有猪蹄,如果有40块以下的猪蹄就买猪蹄,否则就买排骨,排骨买3斤,猪蹄买2斤”
我们整理一下:
1.询问是否有猪蹄(猪蹄优先于排骨);
2.判断是否有猪蹄:
(1)如果有猪蹄,继续询问猪蹄的价格
如果猪蹄价格小于等于40块,则购买2斤猪蹄,并且回家
如果猪蹄价格大于40块,不购买猪蹄,继续执行(没有回家)
(2)如果没有猪蹄,继续执行(没有回家)
3.询问是否有排骨;
4.判断是否有排骨:
(1)如果有排骨,购买3斤排骨,回家
(2)如果没有排骨,回家
是不是感觉很复杂?明明只是简单的一句交代~那是因为写程序的时候,需要把所有的情况都考虑到,我们对妈妈的话进行了“补全”。
我们也可以使用流程图来帮助我们梳理逻辑(这里我使用的是Microsoft Visio):
接下来我们来实现这个逻辑。
Market market = new Market("菜市场"); string ribs = "排骨"; string trotters = "猪蹄"; var isHaveTrotters = market.IsHaveProduct(trotters); if (isHaveTrotters) { var trottersPrice= market.GetPrice(trotters); if (trottersPrice <= 40) { market.Buy(trotters, 2); //“回家”,后面的逻辑不再执行 return; } } var isHaveRibs = market.IsHaveProduct(ribs); if (isHaveRibs) { market.Buy(ribs, 3); }
这里有很多种写法,有经验的开发可以把代码写得更加简洁和漂亮。但是力求简洁的同时,请一定、一定多写注释,用代码和注释保证业务逻辑的清晰,这既是为了自己维护代码的方便,也是为了给其他开发阅读提供便利。有时候宁愿把代码写得“低级”一点,更长一点,也不要为了简洁去抛弃代码的可读性。命名要严谨也是一样的道理。
if-else语句只能填写“真-假”的问题,那么超过两种可能的问题怎么解决呢?当然也可以通过嵌套if-else来解决,但C#为我们提供了更便利的方式——————switch。
多种情况的判断————switch
switch多用于枚举值判断、某种状态的判断(比如XXXStatusCode)。这种情况下,使用switch可以变得很简洁而美观,提高代码可读性。详细的用法可以看这里。
switch对选择困难症的小伙伴来说一定不陌生。比如打算放假出去旅游,既想去日本,又想去拉萨,还想去泰国。但是假期又只够去一个地方。这个时候,我们就可以使用“switch”啦。
var selectedTourism = "你最终选择前往的目的地"; switch (selectedTourism) { case "日本": //做前往日本的旅行攻略 break; case "拉萨": //做前往拉萨的旅行攻略 break; case "泰国": //做前往泰国的旅行攻略 break; default: //选择什么的太困难了,还是宅家里吧 break; }
理解了么?根据情况,选择了不同的目的地,就会去完成不同的事情(不同的旅游攻略)。在程序中,如果都没有选,就会有一个“默认处理”的入口“default”。
示例代码
JudgeConditions