while(true){
// dog:if( GOTOstate == DOG ){
}
// cat:if( GOTOstate == DOG || GOTOstate== CAT ){
}
// mouse://no test needed here, just do MOUSE stuffif( bizarre_condition1 ){
GOTOstate= CAT;
continue;
}
if( bizarre_condition2 ){
GOTOstate= MOUSE;
continue;
}
GOTOstate = DOG;
}
但不是很优雅,特别是对于大量的标签。一个更好的方法是
while(true){
switch(GOTOstate){
case DOG:
// do DOG stuff// break; // do NOT use the break so you get deliberate FALL-THROUGHcase CAT:
// do CAT stuff// break; // do NOT use the break so you get deliberate FALL-THROUGHcase MOUSE:
// do MOUSE stuffbreak;
default:
break;
}
if( bizarre_condition1 ){
GOTOstate= CAT;
continue;
}
if( bizarre_condition2 ){
GOTOstate= MOUSE;
continue;
}
}
我在BBC Basic时代就使用了GOTO。我甚至在我的全职工作中使用了BBC BASIC大约7年 ...... 即使BBC BASIC有GOSUB和RETURN,这样子程序(函数)就可以被使用 ...... 你为什么要在MQL4中使用类似于GOTO的东西? 也许你可以解释你的需要?
嗨,猛禽。
正如你自己所说,你自己使用这种东西多年,因此知道它可以利用的无数情况是非常方便的。GoSub'和'Return'函数 基本上与我所指的'GoTO'的想法相同。虽然在GoSub/RETURN函数中,人们必须返回到调用程序中的同一个点。不像'GoTo'那样,会造成非常混乱的噩梦。虽然我猜测MQL中的Include、Library和.dll文件利用能力与此类似。但这并不允许人们用GoSub/RETURN等进行控制。
许多用于计算机加工的编程迭代也包含GoSub/RETURN对,它在该环境中相当有用。允许高度的模块化和重复使用许多标准的 "罐装循环",以及在许多程序中反复使用自定义和专门的功能。每次需要时,不必不断地 "重新发明 "车轮。当我开始做合同计算机加工编程时,我面临着超过2000个不同的CNC控制器:都有自己的编程变化)< 8)这迫使我利用非常昂贵的CAD-CAM软件,这是不好的。我经常可以自己编写相当好的和更有效的软件,在更短的周期时间内产生更好的结果,并且比软件产生更好的刀具磨损。
GOSUB/RETURN与在MQL4中使用函数 是一样的。
很多年前我做过一些数控编程工作 . .主要是航空空间的工作。
我不认为C有这样的例子,对吗?
是的,它是。它在K&R 第二版第65页。他们说 他们在书中没有使用它,然后在下一页举了一些例子。
我认为我们在这里试图模仿的是
可以像这样做...
但不是很优雅,特别是对于大量的标签。一个更好的方法是
但你真的需要把函数调用 放在switch语句中,否则如果switch 超过几页代码,你就无法看到代码的结构。
嗨,SDC。
与大多数编程一样,MQL4几乎都是'函数',除了跳过一些线之外,没有一个真正的'转到'函数,我正试图找出如何在MQL4的EA内做这些事情。所以我 不确定你'同意'什么,以及你在这个搜索背景下的意思和所指的是什么?请展开并解释。不是在争论。听起来你好像有什么想法,我想知道它是什么,以及它如何对我们有利。
嗨,FourX,我看错了前面的帖子,我以为有人已经说过了,我的意思是函数调用 超越了GoTo的概念,提高了它的可操作性,尤其是当它被组织成函数时,之后阅读代码比遵循GoTo更容易,就像dabbler用他的例子展示的,使用开关的多路分支可以实现与多个GoTo相同的事情。
我认为我们在这里试图模仿的是
可以像这样做...
但不是很优雅,特别是对于大量的标签。一个更好的方法是
但你真的需要把函数调用放在switch语句中,否则如果switch 超过几页代码,你就无法看到代码的结构。
嗨,Dabbler。
一个真正的 "GoTo "语句/函数允许人们跳到程序中的任何地方,而不仅仅是跳到下一个(几个)表达式/语句。这样就可以在程序中的多个实例中重新使用相同的函数。
因此,它既灵活又方便。正如我所提到的,这也是一把双刃剑,因为这很容易使它陷入困境,并使程序成为噩梦般的存在。
MQL5是否有类似 "GoSub/RETURN"、"GoTo "等的功能?Visual Basic、Java、PHP等呢?
GOSUB/RETURN与在MQL4中使用函数是一样的。
很多年前我做过一些数控编程工作 . .主要是航空空间的工作。
到目前为止,我已经能够弄清楚Raptor,他们没有像GoSub/Return这样的命令,也没有能力在MQL4中制作这样的函数。因此,我试图在MQL4中找出一种方法来执行这种能力。
我认为我们在这里试图模仿的是
可以像这样做...
但不是很优雅,特别是对于大量的标签。一个更好的方法是
但你真的需要把函数调用放在switch语句中,否则如果switch 超过几页的代码,你就无法看到代码的结构。
MQL4参考 - 基础知识 - MQL4的语法除了一些特点外,大部分是类似C的语法。
没有地址算术。
没有操作符do ... while。
没有操作符 goto .....;
没有[条件]? [表达式1]:[表达式2]的操作。
没有复合数据类型(结构)。
不可能有复杂的赋值;例如,val1=val2=0;arr[i++]=val; cond=(cnt=OrdersTotal)>0;等等。
逻辑表达式的计算总是完成的,不会提前终止。
https://book.mql4.com/operators/call
嗨,1withZachy。
从本质上看,这似乎是MQL4的SOP,它实际上只是利用了一个标准或自定义函数,然后像MQL4那样将结果 "返回 "到函数中。虽然从流程图上看,他们可能有一个微妙的区别,我错过了,但我不这么认为。唉,所提供的示例代码中的文档。CallFuntion.mq4'是俄语,我完全不能理解。
维基百科上关于GoTo 的一篇有趣的文章中的一些摘录。
许多语言支持goto语句,也有许多不支持。在Java 中,goto是一个保留词,但无法使用。[1][2] 在PHP 中,直到5.3版本才有对goto的本地支持(有库可以模拟其功能)。[3]
结构化程序定理 证明,编写程序不需要goto语句;序列、选择/抉择和重复/迭代这三种编程结构的某种组合足以用于任何可以由图灵机 执行的计算。
20世纪60年代和70年代,计算机科学家放弃了GOTO语句,转而采用"结构化编程 " 范式。一些[哪些?]编程风格的 编码标准禁止使用GOTO语句,特别是考虑到前面提到的结构化程序定理。Böhm-Jacopini证明 并没有解决是否采用结构化编程进行软件开发的问题,部分原因是这种结构更可能使程序变得模糊不清,而不是改进它。
对GOTO最著名的批评可能是Edsger Dijkstra 在1968年写的一封信,名为Go To Statement Considered Harmful。[5] 在那封信中,Dijkstra认为无限制的GOTO语句应该从高级语言中废除,因为它们使分析和验证程序正确性的任务变得复杂(尤其是那些涉及循环的程序)。
Donald Knuth 的Structured Programming with go to Statements[6] 中提出了另一种观点,它分析了许多常见的编程任务,发现在其中一些任务中,GOTO是最佳的语言结构。