Programming languages 没有ELSE关键字的编程语言-它更复杂吗?

Programming languages 没有ELSE关键字的编程语言-它更复杂吗?,programming-languages,program-flow,Programming Languages,Program Flow,我正在为孩子们开发一种简单的编程语言,基于。为了控制程序流,我目前提供了以下设施(伪代码): 定义无参数过程 if[not]表达式语句 while[not]表达式语句 我没有任何方法从一个过程返回,并且我没有提供else语句。 以以下代码为例: if something statement1 if not something statement2 代码的执行流向if,如果某物为真,则执行语句1; 然后测试某些内容是否不正确(但程序的状态已更改!),然后执行语句2。这可能导致两个测试都成

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

  • 定义无参数过程
  • if[not]表达式语句
  • while[not]表达式语句
我没有任何方法从一个过程返回,并且我没有提供
else
语句。

以以下代码为例:

if something
 statement1
if not something
 statement2
代码的执行流向
if
,如果
某物
为真,则执行
语句1
; 然后测试
某些内容是否不正确(但程序的状态已更改!),然后执行
语句2
。这可能导致两个测试都成功

这会限制程序员吗?到目前为止,我已经能够通过使用
if
解决所有示例问题<编码>如果不
…,或先使用
如果不
,然后使用
如果

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


或者省略
else
语句实际上是在使语言更加复杂和违反直觉吗?

如果
某些东西的评估成本很高,那么使用
else
的语言可能会出现问题,因为评估将执行两次

另一个潜在的问题是,如果语句1可以修改
something
的值,那么最终可能会导致两个测试都成功-如果使用其他语句,这是不可能发生的

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

bool result = something
if result
    statement1
if not result
    statement2

因此,不,您并不是在尽可能地限制程序员—使用
或者
可以完成的所有事情都可以通过使用上述方法在没有它的情况下完成。但是,每次编写的代码要多一点,这会给粗心的程序员带来一些新的潜在问题,如果允许
else
的话,这些问题是可以避免的。如果
某个东西的评估成本很高,那么使用
else
的语言可能会出现问题,因为评估将执行两次

另一个潜在的问题是,如果语句1可以修改
something
的值,那么最终可能会导致两个测试都成功-如果使用其他语句,这是不可能发生的

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

bool result = something
if result
    statement1
if not result
    statement2

因此,不,您并不是在尽可能地限制程序员—使用
或者
可以完成的所有事情都可以通过使用上述方法在没有它的情况下完成。但是每次编写的代码都要多一点,这给粗心的程序员带来了一些新的潜在问题,如果允许
其他
的话,这些问题是可以避免的,如果
某些东西有副作用,而不是你的方法会导致它们发生两次,这可能不是你想要的。

如果
某些东西有副作用,那么你的方法会导致副作用发生两次,这可能不是你想要的。

我认为教孩子们复制代码是个坏主意。

我认为教孩子们复制代码是个坏主意。

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

如果某件事是真的,那么就做某件事,否则其他事情就不那么奇怪和令人困惑了,这听起来非常简单,必须再次计算和否定一个表达式才能检查它的否定。。它是一种免费的(在“没有增加复杂性”的意义上)可选的同步策略,在开发语言时是自动的


else
语句相比,我发现许多其他功能实际上更无用。。那么您就没有考虑到这样一个事实,即对一个条件进行两次评估可能会有害于副作用复杂性(cpu浪费?)或者,事实上你已经计算过了,你不得不再次计算,因为你缺乏语言,而不是因为它有意义。

从语义上讲,你可以避免使用
else
结构,但从实际角度看,我不认为有任何必要这样做

如果某件事是真的,那么就做某件事,否则其他事情就不那么奇怪和令人困惑了,这听起来非常简单,必须再次计算和否定一个表达式才能检查它的否定。。它是一种免费的(在“没有增加复杂性”的意义上)可选的同步策略,在开发语言时是自动的


else
语句相比,我发现许多其他功能实际上更无用。。那么你就没有考虑到这样一个事实,即两次评估一个条件可能会对副作用或复杂性有害(cpu浪费?),或者你已经计算过了,你不得不再次评估,因为语言缺乏,而不是因为它有意义。

,当然,这似乎让事情变得更加复杂;要编写上述内容,您必须麻烦地编写两次
something
(或者在前面将变量设置为
something
)。如果您有两个条件,则必须在not-
else
子句中再次写入它们,以获得相同的行为,依此类推。至少你的孩子会擅长运用德摩根定律!嗯,它确实似乎使它更复杂了,;要编写上述内容,您必须费劲地编写两次
内容(或设置一个变量)