代码之家  ›  专栏  ›  技术社区  ›  Axarydax

不带else关键字的编程语言-是否更复杂?

  •  1
  • Axarydax  · 技术社区  · 14 年前

    我正在为孩子们开发一种简单的编程语言,基于 Karel . 为了控制程序流,我目前提供了这些设施(伪代码):

    • 定义无参数过程
    • if[not]表达式语句
    • while[not]表达式语句

    我没有任何方法可以从程序中返回,并且 我不提供 else 语句。

    以下面的代码为例:

    if something
     statement1
    if not something
     statement2
    

    代码的执行流向 if 执行 statement1 如果 something 是真的; 然后测试是否 某物 不是真的( 但是程序的状态已经改变了! ,然后执行 statement2 . 这会导致两个测试都成功。

    这会限制程序员吗? 到目前为止,我已经能够通过使用 如果 if not …或使用 如果没有 首先,然后 如果 .

    所以,我的问题是: 正在添加 其他的 必要的陈述? 它会使语言变得更加复杂,因为有更多的关键字。所有的问题都能解决吗 其他的 语句也可以在没有它的情况下解决,尽管更复杂?

    或者省略了 其他的 声明实际上使语言更加复杂和反直觉?

    4 回复  |  直到 14 年前
        1
  •  3
  •   Mark Byers    14 年前

    如果 something 用你的语言来评价是很昂贵的 else 可能会出现问题,因为评估将执行两次。

    另一个潜在问题是,如果Statement1可以修改 某物 你可能会以 二者都 测试成功-如果使用其他方法,则不会发生这种情况。

    当然,可以通过将结果存储在临时局部变量中来缓解这些问题:

    bool result = something
    if result
        statement1
    if not result
        statement2
    

    所以不,你没有限制程序员在可能的范围内——所有可以做的事情。 其他的 不使用上述方法就可以完成。但每次编写代码都要多一点,这会给粗心的程序员带来一些新的潜在问题,如果允许的话,这些问题是可以避免的。 其他的 .

        2
  •  3
  •   Jack    14 年前

    从语义上讲,你可以避免 else 构造,但从实际的角度来看,我不认为有必要这样做。

    概念 如果某件事是真的,就做点什么,否则就做点别的。 不是那么奇怪和困惑,实际上,为了检查一个表达式的否定性,必须再次计算和否定它,这听起来非常简单。它是一种免费的(意思是“不增加复杂性”)可选的同步策略糖,在开发语言时是自动的。

    我看到了许多其他的功能,与 其他的 语句…那么你就不会考虑这样一个事实:两次评估一个条件可能对 副作用 或为了 复杂性 (浪费的CPU?)或者你已经计算过了,你必须再做一次 缺乏语言 不是因为它是有意义的。

        3
  •  1
  •   John Percival Hackworth    14 年前

    如果 something 副作用比你的方法会导致它们发生两次,这可能不是你想要的。

        4
  •  0
  •   The Smallest    14 年前

    imho教孩子们复制代码是个坏主意。

    推荐文章