前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >IF ELSE IF 到底算不算分支语句?

IF ELSE IF 到底算不算分支语句?

作者头像
高一峰
修改2020-09-22 14:24:31
1.2K0
修改2020-09-22 14:24:31
举报
文章被收录于专栏:高渡号外高渡号外

IF ELSE IF 到底算不算分支语句?

—— 新手编程1001问之C#编程基础


if...else if...语句有时被归类在判断语句中,那么它到底属不属于分支于句,它和分支语句有什么区别?

这是个好问题。之所以说它好,是因为它确实总在不经意中困扰着我们。虽然我们已经会使用它了,但是,它依然总是在无意间跳出来提醒我们,if...else if...到底是判断语句呢,还是分支语句?

好的,这里我就确切地告诉你,它既是判断语句,也是分支语句。因为,在形式上,它既做了判断,也存在分支。事实上,关于if...else if...究竟是判断语句还是分支语句,并不重要,重要的是你能真正的理解它、并擅长使用它。

实际上,它让我们产生困惑的原因,就是因为它的存在正好介于标准的判断语句和典型的分支语句之间,并且,拥有双方的共同特征。

前面回答的问题当中,我们已经详细介绍了判断语句语法特征和使用方法。有兴趣的同学可以公众号顶部查看《C#编程基础知识专辑》内容。

那么,今天呢,我们借这个问题,先介绍一下分支语句的语法特征和使用方法,回头我们再来分析,到底是什么东西在一直影响或困扰着我们?

通常,我习惯于把switch...case...语句成为标准的分支语句。下面我们来看看它的语法特征。

代码语言:javascript
复制
switch (obj)
{
 case value1:
        //当obj值为value1时,应该改执行的代码
 break;
 case value2:
        //当obj值为value2时,应该改执行的代码
 break;
 case value3:
        //当obj值为value3时,应该改执行的代码
 break;
...
 default:
      //当obj值不为value1-3时,默认该改执行的代码
 break;
 }

语法特征:

1、switch括号中的obj对象,必须是一个有值的、可枚举的对象。

2、case语句数量不限。

3、case后面的对象,必须是一个常量,且与switch括号里的a对象具有相同的数据类型。

上面的语法,通俗的理解就是:我们需要通过判断一个对象obj的值究竟是什么,来决定程序接下来该选择执行哪一块代码。

下面,我们看一个简单的实例:

代码语言:javascript
复制
//创建变量a
int a = 3;
//根据目标对象的值,选择程序可执行的代码块
switch (a)
{
 case 1:
        Console.WriteLine("较小");
 break;
 case 2:
        Console.WriteLine("一般");
 break;
 case 3:
        Console.WriteLine("较大");
 break;
 default:
        Console.WriteLine("未知");
 break;
}

上面代码执行的结果是在屏幕上输出:3

switch...case...就是所谓的典型的分支语句的特征,它集中关注一个特定对象的值,并且会因为它的值不同,而选择执行不同的代码块。

那么,到此,我们可以将它与if...else if ...语句进行比较,看看他们有什么相似和不同之处:

相似之处:

  • 都存在分支代码块。
  • 分支代码块的执行需要符合一定的条件。
  • 都有默认执行代码块,If...else if...里是最后跟着的else{}语句,switch...case...是其中的default(默认)选项。

不同之处:

  • l If...else if...的条件是不受限制的,每个分支代码允许完全不同的条件而成立;而switch...case...的分支条件只能针对特定的obj对象,简单说就是只关心obj的值,并由此决定分支的选择。
  • l 形式上,If...else if...没有break语句,因为它只要遇到一个条件成立,就有直接执行了对应分支的代码,自然终止了后续代码的执行。而switch...case...遇到合适的条件,需要依赖break来终止后续代码的检查。
  • l If...else if...最后的else默认选项是必须的,而switch...case...是其中的default(默认)选项则是可选的,这也意味着,switch...case...语句有可能不会执行其中的任何分支代码,除非至少有一个case的值与switch的参数是匹配的。

正因为,两者之间存在显著的不同,大多是时候的If...else if...语句的代码无法用switch...case...语句替代。但是,比较有意思的是,几乎所有的switch...case...语句的代码,都可以使用If...else if...语句来替代。

我们将前面的switch...case...语句的案例,修改为If...else if...语句,代码如下:

代码语言:javascript
复制
//创建变量a
int a = 3;
//多重条件判断,决定程序可执行的代码块
if (a == 1)
{
    Console.WriteLine("较小");
}
else if (a == 2)
{
    Console.WriteLine("一般");
}
else if (a == 3)
{
    Console.WriteLine("较大");
}
else
{
    Console.WriteLine("未知");
}

//这里最后一个else是必须的,并且它不再携带条件判断。

好了,通过以上的介绍和对比分析,相信你对If...else if...究竟是不是分支语句,已经不再感兴趣了。作为程序员,深入理解一个语法对象本身才是最重要的。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-08-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 高渡号外 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • IF ELSE IF 到底算不算分支语句?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档