我一直想知道编写控制结构的其他方法,比如你可以在Forth编写自己的语言结构。
您在if
语句中尽早了解的内容是对此的替代:
if ( x ) {
// true
} else {
// false
}
有了这个(有时候,与许多括号相比,这更具可读性):
x ? true : false
让我思考。我们可以替换其他任何东西,因为它更具可读性。
因此,对于if
声明并进行比较,我可以想到这些。
所以我想知道如何替换for
,while
等循环结构。
例如,如何替换while循环(不使用for循环)。很可能用这些语言不能完成它?
while (a < b) {
}
答案 0 :(得分:3)
如何替换while循环
可以通过递归替换循环。
void doWhile(a, b) {
/* do something with a and b, hopefully changing them */
if (a > b) doWhile(a, b);
}
答案 1 :(得分:1)
你在问题中提出了一个有趣的话题:C语言编程中的“boolean”是什么?
在我看来,答案是布尔值(实际上是布尔运算)是C中的隐式控制结构。
它来自“短路”规则 - 当&amp;&amp;和是假的或者是||是的,根本没有计算权利。除了条件跳转之外没有办法实现这个 - 任何按位OR和AND都不够。另外,考虑比较:a&gt; b被翻译为在大多数现代处理器上进行比较和有条件地跳转。当a> b时,它不是“在寄存器中存储1”。
您发现我们在逻辑运算和比较中使用隐式控制结构而不是显式“if”。有些语言更进一步 - 在Perl中考虑这个标准习惯用法:
open("myfile.txt") or die "Could not open file";
答案 2 :(得分:0)
它与控制结构无关。您会看到if
生成bool
值的情况。这实际上是包含在不需要的控制结构中的布尔表达式。您不能以这种方式重写通用if
。就像说那样
int c = 0;
for (int i = 0; i < 10; i++)
c++;
可以改写为c = 10;
,它没有关于控制结构的内容。
产生这种过多的结构是因为有时候把它写成结构更容易,但不能尝试产生单个表达式。这源于懒惰和缺乏程序员的思考。这是一个例子。您需要计算递增数字的总和。什么先来到你的头上?右:
int sum = 0;
for (int i = 0; i < 10; i++)
sum += i;
现在尝试找到单个表达式如何计算。这不太明显。
答案 3 :(得分:0)
答案 4 :(得分:0)
在某些情况下,您可以将所有逻辑放入“for-loop语句”的第三个参数中,并创建一个看起来空的但是做一些工作的循环(我不是说这是一个好的风格)。例如,
int t =0;
for (int i = 0; i++ <10; t+=10); // warning : don't forget semicolon
答案 5 :(得分:0)
您也可以用布尔表达式替换:
expr1 && expr2;
与
相同 if(expr1)
expr2;
和
expr1 || expr2;
相当于
if(!expr1) expr2;
所以你可以替换
if(expr1)
expr2;
else
expr3;
通过
expr1 && expr2;
!expr1 || expr3;
但为什么有人想这样做又是另一个问题。我的同事喜欢这种事情,因为他认为这使得他的节目更加出色。
答案 6 :(得分:0)
还有Smalltalk的做事方式。在Smalltalk中,EVERYTHING是一个对象,包括代码块。没有条件命令结构。
布尔类有两个子类,True和False(每个都有一个对象,分别为true和false)。条件是一个发送到布尔对象的方法,它有两个参数,一个代码块和一个else代码块。 True对象执行then分支,False对象执行else分支。
虽然循环类似,但for循环是整数对象的消息......
我觉得它很整洁。