从代码规范考虑,哪个方法里的if语句写的好?
理由?
会和效率有关系吗?
编译器是怎么解析if的?
谢谢public void Test1()
{
    if(something)
    {
        do something
    }
     
    do something;
}public void Test2()
{
    if(something)
    {
        do something;
    }
    else
    {
        do something;
    }
}

解决方案 »

  1.   

    呃  写错了 Test1应该是public void Test1()
    {
        if(something)
        {
            do something
            return;
        }
         
        do something;
    }
      

  2.   

    首先如果if和else里边的逻辑同行重要,而不是防御式编程,那最好用if else
    如果是防御式编程,肯定是用return
      

  3.   

    一般第一种吧程序里经常又这样的判断if(条件1)
    return;if(条件2)
    return;...//处理逻辑如果都if else嵌套的太多,不够清晰
      

  4.   


    没有可比性,看业务要求,看看下面这两小段代码吧
    if(iSex==0)
    {
    MessageBox.Show("男");
    return;
    }
    MessageBox.Show("女");if(iSex==0)
    {
    MessageBox.Show("男");
    }
    else
    {
    MessageBox.Show("女");
    }
      

  5.   

    public Int32 GetName(Object id)
    {
       if(id == null || id == DBNull.Value) return 0;
       return dal.GetObjectById(id).Name;
    }
      

  6.   

    但如果是这样的,就不要提前return了public void Wear(Person person)
    {
        if(person.Sex == '男')
        {
            //打领带,穿皮鞋
        }
        else
        {
            //带凶器,套丝袜
        }
    }
      

  7.   


    针对第一段代码
    如果
    MessageBox.Show("女");后面没有其他的代码了
    那这两段从结果来看不是一样的意思? 我想问的是这种情况
    如果MessageBox.Show("女");后有其他代码
    那需求的意思其实是:iSex==0时执行男的并返回,为其他时执行女的,并执行余下代码 对吧?第二段的意思肯定就是if和else了我没理解错吧?
      

  8.   

    防御式的编程懂了
    如果不是防御式,最好用if else
    这个最好的意思:是从可读性上考虑的 还是从代码/编译器效率考虑的?或者是其他方面?
      

  9.   

    这种情况最好是用if else
    而不要提前return,因为if 和 else中的内容同等重要,同样这样的代码显出了另外一个问题,最好是这样MessageBox.Show(GetSexName(isSex));public String GetSexName(Byte isSex)
    {
       return isSex == 0 ? "男" : "女";
    }
      

  10.   

    anders比较推崇新的语法结构来改进if else
    例如linq
      

  11.   

    根据业务需求吧
    如果 
    if(XX)
    {
      XXX;
      return;
    }
    XXX;如果下面还有需要的执行语句怎么办???这情况肯定是要用第二种了。这不关效率不效率的问题了,而是跟业务有关系了。如果就单单一个if else ,没什么效率可言。
      

  12.   


    if else 有问题的,看看最基础的书就能了解。
    我们平时商业开发不注重这些倒是真的
      

  13.   

    http://sd.csdn.net/a/20100831/278848.html下面引用可能是anders的原话DSL的可读性往往很高。例如,要筛选出单价大于20的产品,并对所属种类进行分组,并降序地列出每组的分类名称及产品数量。如果是用命令式的编程方式,则可能是这样的:Dictionary<string, Grouping> groups = new Dictionary<string, Grouping>();  foreach (Product p in products)  {      if (p.UnitPrice >= 20)      {          if (!groups.ContainsKey(p.CategoryName))          {              Grouping r = new Grouping();              r.CategoryName = p.CategoryName;              r.ProductCount = 0;              groups[p.CategoryName] = r;          }          groups[p.CategoryName].ProductCount++;      }  }   List<Grouping> result = new List<Grouping>(groups.Values);  result.Sort(delegate(Grouping x, Grouping y)  {      return         x.ProductCount > y.ProductCount ? -1 :          x.ProductCount < y.ProductCount ? 1 :          0;  }); 显然这些代码编写起来需要一点时间,且很难直接看出它的真实目的,换言之“What”几乎完全被“How”所代替了。这样,一个新的程序员必须花费一定时间才能理解这段代码的目的。但如果使用LINQ,代码便可以改写成:var result = products      .Where(p => p.UnitPrice >= 20)      .GroupBy(p => p.CategoryName)      .OrderByDescending(g => g.Count())      .Select(g => new { CategoryName = g.Key, ProductCount = g.Count() }); 这段代码更加关注的是“What”而不是“How”,它不会明确地给出过滤的“操作方式”,也没有涉及到创建字典这样的细节。这段代码还可以利用C# 3.0中内置的DSL,即LINQ查询语句来改写:var result =      from p in products      where p.UnitPrice >= 20     group p by p.CategoryName into g      orderby g.Count() descending      select new { CategoryName = g.Key, ProductCount = g.Count() }; 编译器会简单地将LINQ差距语句转化为前一种形式。这段代码只是表现出最终的目的,而不是明确指定做事的方式,这样便可以很容易地并行执行这段代码,如使用PINQ则几乎不需要做出任何修改 
      

  14.   


    看需不需要贯穿,不管条件如何我们都需要一个结果,那就贯穿 if()
    {
    }
    else
    {
    }
    有候我们并不关心 else的结果,那就不贯穿,,if()
    {
       return;
    } 额,纠结这不能涨工资啊,,
      

  15.   

    一般處理什麼中斷性返回才用 return  如果是同一個優先級的 就if else  
      

  16.   

    MessageBox.Show(值==1?"":"");
    delegate委托操作
    public static T If<T>(this T t, Predicate<T> predicate, params Action<T>[] actions) where T : class
            {
                if (t == null) throw new ArgumentNullException();
                if (predicate(t))
                {
                    foreach (var action in actions)
                        action(t);
                }
                return t;
            }
      

  17.   

     lz把自己当成电脑,你是想尽快的得到答案且返回了,还是所已经得到了答案但还是继续的读执行代码了。
    所以你就运用了return
      

  18.   

    俺以前听在JAPAN工作过的老大说,一个if后要跟一个else,即使else为空。
    这样主要是为了以后应对else可能的变化。要知道唯一不变的是变化本身。
      

  19.   

    为了不使大脑扭曲,有的情况是可以加的,比如:if(obj.Done())
    {
       //do nothing
    }
    else
    {
       throw new Exception("程序执行错误,{0}",obj.ToString());
    }这样的代码有时看起来比下边这样的舒服些
    if(!obj.Done()) //扭曲了一下
    {
       throw new Exception("程序执行错误,{0}",obj.ToString());
    }
      

  20.   

    我发现中国的程序完全都是被“毒害”了啥玩意都在“效率”“效率”-------好像计算机的1ms,对他来说就是几个世纪ps:对于lz的问题,根本没有任何效率问题对于所有的判定,编译出来的代码都一样
    mov ax,[xxxx]
    mov bx,[yyyy]
    cmp ax,bx
    jnp [xxxxxxx] -------符合就跳转,不符合就往下执行,这有啥效率不效率的考虑,只要是分支判断,对计算机来说都是这几行代码,你带不带else他都是这么几行
    Call [yyyyyy]
      

  21.   

    如果语法规定你可以无数次嵌套if else那么你就是写上一亿个if 嵌套,都没有任何问题迷宫看上去复杂,但出路只有一条,100亿个分支又如何,该转8个弯的他不会转10个弯,该把100亿个分支全转遍的,他也不会只转99亿就出来了
      

  22.   

    Done 我想要的可能就是这些 
    哈哈 当时上学的时候没学好 
    我只是想知道 if else 翻译成机器语言之后 是什么 怎么解释 
      

  23.   

    推荐楼主使用if(){}else{}这样逻辑比较清晰
      

  24.   


     第一个是无论如何都会执行do something, 第二个,只会执行其中一个。