【问题标题】:How should I format this piece of code?我应该如何格式化这段代码?
【发布时间】:2010-09-29 10:29:51
【问题描述】:

这里有两种调用callscript的方法(伪代码):

使用重复调用

if flag == true
    flag = false
    callscript
    flag = true
else
    callscript
endif

使用额外的变量

flag2 = flag
flag = false
callscript
flag = flag2

条件

  • 我必须确保调用脚本时flagfalse
  • 此外,flag 值必须恢复为原始值。

还有比这两个更好的方法吗?如果不是,其中哪一个是更好的选择?

【问题讨论】:

    标签: language-agnostic program-flow


    【解决方案1】:

    最好是在调用中同时发送标志,这样标志和方法之间的关系就清楚了:

    callscript(false)
    

    如果这不是一个选项,而您必须在两者之间做出选择,那么任何一个都可以。没有明显的赢家,两者的可读性差不多,所以这只是一个品味问题。

    如果实际调用很复杂以至于您不想在代码中重复它,或者如果数据类型比布尔值更复杂,则第二种选择会更好。

    【讨论】:

      【解决方案2】:

      我会选择变体二,改变变量的名称,使其更容易理解。

      saved_flag = flag
      flag = false
      callscript
      flag = saved_flag
      

      【讨论】:

        【解决方案3】:

        我更喜欢第二个,因为如果你以合理的方式命名 flag2(比如

        backupValueOfFlag = flag
        flag = false
        callscript
        flag = backupValueOfFlag
        

        ) 更清楚你在做什么以及为什么要这样做。

        【讨论】:

          【解决方案4】:

          我认为这就是发明局部变量和子程序参数的原因。

          您真的必须使用全局变量吗?

          【讨论】:

          • 您真的必须使用全局变量吗? - 是的,在这种情况下。
          【解决方案5】:

          我会选择第二个。第一个对我来说太人工了 - if 不是为了程序流,而是为了保留标志值。

          【讨论】:

            【解决方案6】:

            对我来说,更好的选择是第一个。因为它更易读,更清楚那里发生了什么。

            【讨论】:

              猜你喜欢
              • 2018-05-02
              • 1970-01-01
              • 2017-11-24
              • 2014-02-20
              • 2010-09-23
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多