代码之家  ›  专栏  ›  技术社区  ›  Anders Sandvig

如何编写(简单)变量“toggle”?

  •  1
  • Anders Sandvig  · 技术社区  · 16 年前

    给出了以下习语:

    1)

    variable = value1
    if condition
      variable = value2

    2)

    variable = value2
    if not condition
      variable = value1

    3)

    if condition
      variable = value2
    else
      variable = value1

    4)

    if not condition
      variable = value1
    else
      variable = value2

    你喜欢哪一种,为什么?

    我们假设最常见的执行路径是 condition 是假的。

    我倾向于学习使用1),尽管我不清楚为什么我更喜欢它。

    注意:以下示例可能更简单,因此可读性可能更高,但并非所有语言都提供这种语法,而且它们不适合扩展变量赋值以在将来包含多个语句。

    variable = condition ? value2 : value1
    ...
    variable = value2 if condition else value1
    12 回复  |  直到 14 年前
        1
  •  10
  •   cruizer    16 年前

    理论上,我更喜欢3,因为它避免了两次给变量赋值。在现实世界中,尽管我使用上述四种方法中的任何一种,它将更易于阅读或更清晰地表达我的意图。

        2
  •  4
  •   tzot    16 年前

    我更喜欢方法3,因为它更简洁,而且是一个逻辑单元。它只设置一次值,可以作为一个块移动,而且不容易出错(这种情况会发生,特别是在方法1中,如果设置到值1和检查以及可选设置到值2之间由其他语句分隔的话)

        3
  •  3
  •   Kristopher Johnson    16 年前

    3)是你想要发生的最清楚的表达。我认为所有其他的都需要一些额外的思考来确定哪个值最终会出现在变量中。

    实际上,我会使用三元运算符(?:)如果我使用的语言支持它。我更喜欢用功能性或声明性的风格来写,而不是尽可能用命令式。

        4
  •  1
  •   Matthew Scharley    16 年前

    我倾向于自己用很多。 if condition 阅读比 if !condition 尤其是如果你偶然错过了“!”至少在我看来。

    我所做的大多数编码都是用C编写的,但是我仍然倾向于避开terniary操作符,除非我使用(大部分)局部变量。在三元运算符中,如果在某个结构中调用三层,那么行的长度会很快变长,这会迅速降低可读性。

        5
  •  1
  •   Konrad Rudolph    16 年前

    注:以下示例可能更简单,因此可能更易读,但并非所有语言都提供这种语法。

    这不是不在提供这种语法的语言中使用它们的理由。顺便说一下,在我最后一次计算之后,它包括了所有当前主流语言。

    它们不适合扩展变量赋值,将来包含多个语句。

    这是真的。然而,通常可以肯定的是,这样的扩展绝对不会发生,因为 condition 总是会产生两种可能的情况之一。

    在这种情况下,我总是喜欢表达式变量而不是语句变量,因为它减少了语法混乱,提高了表达能力。在其他情况下,我倾向于 switch 如果语言允许这种用法,那么前面提到的语句。如果不是,则返回通用 if .

        6
  •  0
  •   Jarrett Meyer    16 年前

    switch 声明也有效。如果它很简单并且有2到3个以上的选项,那就是我使用的。

        7
  •  0
  •   Ólafur Waage    16 年前

    在这种情况下,情况可能不会发生。我会选择1或2。否则它只是基于我想要代码做什么。(我同意克鲁泽的观点)

        8
  •  0
  •   Joe Chin    16 年前

    如果没有的话,我倾向于使用……返回。

    但如果你想返回一个变量。先把不合格者排除在外有助于提高其可读性。它实际上取决于语句的上下文和语言。case语句可能工作得更好,而且大部分时间都是可读的,但是在vb下性能会受到影响,因此在该特定情况下,一系列if/else语句更有意义。

        9
  •  0
  •   workmad3    16 年前

    方法1或方法3。方法1可以避免额外的范围入口/出口,但方法3可以避免额外的分配。我倾向于避免使用方法2,因为我尽量保持条件逻辑尽可能简单(在本例中是!是无关的,因为它可以重写为方法1而不使用它),同样的原因也适用于方法4。

        10
  •  0
  •   DaveF    16 年前

    这取决于我测试的条件。

    如果是错误标志条件,那么我将使用1)设置错误标志来捕获错误,然后如果条件成功,则清除错误标志。这样就不会丢失错误条件。

    其他的我都会用3)

    非逻辑只是在阅读代码时增加了混乱——在我的头脑中,不能代表其他人说话:—)

        11
  •  0
  •   Mark Cidade    16 年前

    如果变量具有自然默认值,我将使用1。如果这两个值中的任何一个对于默认值同样合适,那么我将使用2。

        12
  •  0
  •   Bart Read    16 年前

    视情况而定。我喜欢三元运算符,但有时使用“if”语句会更清楚。您选择的四个备选方案中哪一个取决于上下文,但我倾向于选择使代码的功能更清晰的方案,而这会因情况而异。