1

我正在开发一种基于Karel的简单儿童编程语言。为了控制程序流程,我目前提供了这些工具(在伪代码中):

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

我没有任何方法可以从程序中返回,也没有提供else声明。

以下面的代码为例:

if something
 statement1
if not something
 statement2

代码的执行流向if,执行statement1ifsomething为真;然后测试如果something不是真的(但程序的状态已经改变了!),然后执行statement2这可以导致两个测试都成功。

这会限制程序员吗?到目前为止,我已经能够通过使用if... if not... 或if not先使用然后使用来解决我的所有示例问题if

所以,我的问题是: 添加else语句是否必要?拥有更多关键字会使语言变得更加复杂。所有可以用else语句解决的问题,如果没有它,是否也可以解决,尽管更复杂?

还是省略该else语句实际上使语言更加复杂和违反直觉?

4

4 回答 4

3

如果something评估成本很高,那么您的语言else可能会出现问题,因为评估将执行两次。

另一个潜在的问题是,如果 statement1 可以修改something您的值,最终可能会导致两个测试都成功 - 如果您使用 else,则不会发生这种情况。

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

bool result = something
if result
    statement1
if not result
    statement2

else因此,不,您并没有将程序员限制在可能的范围内-可以使用上述方法完成的所有事情都可以在没有它的情况下完成。但是每次都要编写更多的代码,并且它为粗心的程序员引入了一些新的潜在问题,如果你允许的话,这些问题是可以避免的else

于 2010-11-21T22:30:27.320 回答
3

从语义上讲,您可以避免使用该else构造,但从实际角度来看,我认为没有必要这样做。

如果某事是真的就做某事的概念,否则就不会那么奇怪和令人困惑,听起来实际上很简单,必须再次评估和否定一个表达式只是为了检查它的否定......它是一个免费的(在“与没有增加复杂性”)可选的语法糖,在开发语言时是自动的。

与该语句相比,我看到许多其他功能确实更无用else。那么您没有考虑这样一个事实,即两次评估条件可能对副作用复杂性(浪费的 cpu?)或您已经计算过的事实本身有害它,你必须再做一次,因为缺乏语言而不是因为它是有意义的。

于 2010-11-21T22:37:58.580 回答
1

如果something有副作用,那么您的方法将导致它们发生两次,这可能不是您想要的。

于 2010-11-21T22:33:03.870 回答
0

恕我直言,教孩子们重复代码是个坏主意。

于 2010-11-21T22:33:41.410 回答