代码就是这样的,其实就是a的返回控制了b、c的执行顺序,感觉这么写实在丑,请问大家有啥建议吗?

2 收藏


直接登录
最新评论
  • 星辰紫夜 phper 2015/12/08

    这样的代码 不写注释不容易一眼就看懂
    还不如
    if( a() ){
    b();
    c();
    }else{
    c();
    b();
    }

    • DawnL 服务器端 2015/12/08

      对,我后来是这样写的,但仍觉着有改进空间,强迫症晚期。。。

    • 斌次方   2015/12/13

      function 下雨()
      {
      if a() return true ;
      else return false ;
      }
      function 出门and带伞()
      {
      b();
      c();
      }
      function 宅着and看电视()
      {
      d();
      e();
      }

      //=============
      if( 下雨() )
      {
      出门and带伞();
      }
      else
      {
      宅着and看电视();
      }

  • Caesar PHP 2015/12/08

    function d(){
    b();
    c();
    }
    function e(){
    c();
    b();
    }
    if( a() ){
    d();
    }
    elseif( !a() ){
    e();
    }
    else{
    return false;
    }
    另一个强迫症患者出现了……

  • alexhilton 程序猿 2015/12/08

    if (a()) {
    b();
    c();
    } else {
    c();
    b();
    }
    如果,代码可以拆的更细的话,也许有更好的写法。

  • 93吸血鬼 学生 2015/12/08

    卧槽,看代码绕了半天,一看字。。。。
    你就直接按字面写啊

  • DawnL 服务器端 2015/12/08

    我只是举个例子。现在确实写成了if else。也试图写成两个函数,但感觉实现两个只有执行顺序不同的方法比较奇怪,而且其实每个方法内部的判断也都是很多的。总之,对于强迫症,怎么看怎么丑。。。

  • 活在当下_沉淀   2015/12/08

    if(a()) {
    b();
    c();
    }else {
    c();
    b();
    }

  • 奔跑的ksun 软件工程师 2015/12/09

    如果仅这一处的执行顺序有不同的顺序,那么按照1楼写
    如果有很多地方都有执行顺序的要求,去看看装饰模式,这个模式用来控制方法调用顺序的

    • DawnL 服务器端 2015/12/10

      对设计模式一直属于似懂非懂,了解一些装饰者模式,能否说一下针对这种情况,具体应该怎么用装饰者模式呢

      • 奔跑的ksun 软件工程师 2015/12/13

        去看看(C#版本)这本书吧.通俗易懂,我三言两语也说不清楚.只有用到的时候才去再看看.而且 a,b,c 这3个方法如果不是同一类行为,用装饰模式好像也不合适..

  • 刘忻沂 码农 2015/12/09

    var first = a() ? b : c;
    var second = first == b ? c : b;
    first();
    second();

    • DawnL 服务器端 2015/12/10

      三目运算符在返回相同的时候挺有用的,但是对当时碰到的可能不太适用

  • 张耙比   2015/12/09

    a();
    c();
    b();
    既然不管a()是真是假b都会执行。为什么还要把b包到if else里哪?

  • Am9X   2015/12/10

    var l=[b,c];
    if(!a()){ l.reverse();}
    l.forEach(function(x,i){x()});

  • 牧心 C/c++ python 2015/12/11

    c语言: (a())?(b(),c()):(c(),b());

  • 伊墨   2015/12/11

    c = function(cb){typeof cb === ‘function’ && cb();}
    a() ? b() : c(b)

  • 伊墨   2015/12/11

    题目看错了。。sorry

  • leo   2015/12/13

    能发现这个问题,说明还不晚。
    b和c都有副作用,应把副作用的部分提取来,b-global()和c-global(),受控的部分为b-local()和c-local();

    因此 b(), c()和c(), b()的区别为b-global()是否影响c-local(),以及c-global是否影响b-locale();
    合理的代码为
    if (a()) {
    b-global();
    }
    else {
    c-global();
    }
    b-local();
    c-local();