基于Karel,我正在为孩子们开发一种简单的编程语言。为了控制程序流程,我目前提供这些工具(伪代码):
我没有办法从程序中返回,我没有提供else
声明。
以下代码为例:
if something
statement1
if not something
statement2
代码的执行流向if
,如果statement1
为真,则执行something
;
然后测试something
是否为真(但程序状态已更改!),然后执行statement2
。 这可以导致两个测试成功。
这会限制程序员吗?到目前为止,我已经能够通过使用if
... if not
来解决我的所有示例问题...或首先使用if not
,然后使用if
。
所以,我的问题是:
是否需要添加else
语句?如果拥有更多关键字,语言会更复杂一些。所有可以通过else
语句解决的问题是否也可以解决,但没有它,虽然更复杂?
或者省略else
语句实际上使语言变得更加复杂和反直觉?
答案 0 :(得分:3)
如果评估something
费用昂贵,那么使用else
的语言可能会产生问题,因为评估会执行两次。
另一个潜在的问题是,如果statement1可以修改something
的值,那么最终两个测试都会成功 - 如果你使用了其他的话就不会发生这种情况。
当然,可以通过将结果存储在临时局部变量中来缓解这些问题:
bool result = something
if result
statement1
if not result
statement2
所以,不,你不是在限制程序员的可能性 - 使用上述方法可以在没有else
的情况下完成所有工作。但是每次编写代码要多一些,并且为不谨慎的程序员引入了一些新的潜在问题,如果你允许else
,就可以避免这些问题。
答案 1 :(得分:3)
从语义上讲,你可以避免使用else
结构,但从实际的角度来看,我认为没有必要这样做。
如果某些事情是真的,的概念会做某事,否则其他事情并不那么奇怪和混乱,听起来实际上非常简单,只是为了检查它的否定而必须再次评估和否定一个表达式。它是一种免费的(在“没有增加复杂性”的意义上)可选的同义糖,在开发语言时是自动的。
与else
声明相比,我发现许多其他功能真的更无用..那么你没有考虑两次评估一个条件可能对副作用或对<有害的事实强烈>复杂性(浪费cpu?)或事实本身你已经计算过它而你必须再次为缺乏语言而不是因为它是有意义的。
答案 2 :(得分:1)
如果something
有副作用而不是你的方法会导致它们发生两次,这可能不是你想要的。
答案 3 :(得分:0)
恕我直言教孩子们复制代码是个坏主意。