问题标签 [goto]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
function - 语言设计:结合Gotos和函数
我正在设计并正在重新考虑一种与汇编程序相似的低级解释编程语言。
我很快就遇到了函数/循环/gotos 决策问题,并认为虽然循环喜欢while
并且for
会太高级且不合适,但 goto 会太低级、无法维护并且通常又是邪恶的。像您这样的函数从大多数具有返回值和参数的语言中都知道,它们也不适合该语言的概念。
所以我试图找出一个函数和一个能够
- 递归
- 高效循环
经过一番思考,我想出了子程序的想法:
- 它们像函数一样有开始和结束
- 他们有名字但没有像 goto 这样的参数
- 你可以用 jump 进入一个并在它结束之前再次退出它
return
(不返回任何结果,只会停止子程序) - 像普通代码一样处理 -> 像 goto 这样的全局范围
所以我想知道:
- 上面的想法好吗?有什么(缺点)优点?
- 会有更好的函数和 goto 组合,甚至是一个全新的想法吗?
vb.net - VB.NET 中的 GoTo 语句和替代方法
我在另一个论坛上发布了一个代码片段寻求帮助,人们向我指出使用GoTo
语句是非常糟糕的编程习惯。我想知道:为什么不好?
在 VB.NET 中使用哪些替代方案GoTo
通常被认为是更好的做法?
考虑下面的这个片段,用户必须输入他们的出生日期。如果月份/日期/年份无效或不切实际,我想循环回来再次询问用户。(我正在使用 if 语句来检查整数的大小......如果有更好的方法来做到这一点,如果你也能告诉我,我将不胜感激:D)
c - c99 转到过去的初始化
在调试崩溃时,我在一些代码中遇到了这个问题:
当第一个 malloc 失败时会出现问题。因为我们跳过了 的初始化p2
,它包含随机数据并且调用free(p2)
可能会崩溃。
我希望/希望这将被视为与在 C++ 中相同的方式,其中编译器不允许 goto 跳过初始化。
我的问题是:跳过标准允许的初始化还是 gcc 的 c99 实现中的错误?
legacy - 被迫转到黑暗面
我们在工作中遇到这样一种情况,即在遗留(核心)系统上工作的开发人员在向已经感染意大利面条代码的现有代码中添加新功能时,被迫使用 GOTO 语句。
现在,我知道使用“只需一点 GOTO”而不是花时间重构为更易于维护的解决方案可能存在争议。问题是,这个孤立的“只有一点 GOTO”并不是那么孤立。至少每周一次左右添加一个新的“一个小 GOTO”。由于可追溯到 1984 年或之前的代码充满了 GOTO,因此使用此代码库已经很恐怖了,这会让许多意大利面食者相信它的灵感来自飞行意大利面怪物本身。
不幸的是,编写此语言的语言没有任何现成的重构工具,因此推动“以后进行重构以提高生产力”变得更加困难,因为短期胜利是这里唯一关注的胜利......
有没有其他人遇到过这个问题,每个人都同意我们不能添加新的 GOTO 来将 2000 行跳转到随机部分,但不断让 Anaylsts 坚持只做一次并让管理层批准?
tldr;
如何解决开发人员被迫(被迫)不断添加 GOTO 语句(通过添加,我的意思是添加以跳转到多行之外的随机部分)的问题,因为它“更快地获得了该功能”?
我开始担心我们可能会因此而失去有价值的开发人员给猛龙队......
澄清:
去 here
alsoThere:
不,我说的是那种将 1000 行从一个子例程跳到另一个子例程中途进入 while 循环的 goto。去 somewhereClose
there:
我什至没有谈论您可以合理地阅读并确定程序在做什么的那种 goto。去 alsoThere
somewhereClose:
这是制作肉丸的代码midpoint:
如果第一次来到这里 Goto nextpoint
detail:
(每个几乎完全不同)Goto pointlessReturn
here:
在这个问题中,我不是在谈论偶尔可以使用 goto。去there
tacoBell:
它刚刚回到绘图板上。去 Jail
elsewhere:
如果每次触碰程序都需要花费数周时间来破译程序在做什么,那么您的代码库就存在严重问题。hell:
事实上,如果不是最新的 goto 4
版本的规范goto goto,我实际上是由我自己决定的detail
pointlessReturn:
tacoBell
Jail:
实际上,只是一个小小的更新,一个小小的胜利。我花了 4 个小时一次重构这个特定程序的一部分,一个标签,每次迭代都保存在 svn 中。每一步(大约 20 步)都很小、合乎逻辑,而且很容易通过某种奇怪的意大利面肉丸磁力自发地跳出你的饭菜,进入你的屏幕。 Goto合理地验证它不应该引入任何逻辑更改。使用这个新的更具可读性的版本,我已经与分析师坐下来,现在完成了几乎所有的更改。去bypass
nextpoint:
elseWhere
bypass:
end
4:
第一个 *如果第一次在这里 goto hell
,没有第二个如果第一次在这里 goto hell
,没有第三个如果第一次在这里 goto hell
第四个现在是最新的 goto hell
end:
c - goto 的可接受用途是什么?
可能重复:
C 或 C++ 中好的 goto 示例
您认为 goto 语句的哪些用途可以接受?我正在讨论 C 嵌入式工作的一些编码指南,并想知道在某些情况下 goto 是最干净的做事方式。
logic - Simple program logic to Call method continuously
I am in a situation, in which my program needs to do processing and then wait for some interval, let's say 5 seconds and the do the same processing again.
I don't know how to implement the logic.
I have developed a logic, the code is below:
What this code does: I only have to call this method once, it will do the processing then wait for 5 seconds and then again process.
So far above code is working fine, but i have heard using "goto" statements is not considered good in programming.
I want to know, will there be any side effect of this code or is there any other efficient way of doing the same thing.
sql-server - Sql - goto 语句
在 SQL 查询中使用“goto”语句是一种好习惯吗?
java - 哪些编程语言支持带有 break 和 continue 语句的标签?
我最近阅读了 java 中的标签语句以及使用 break 和 continue 语句指定标签的能力。还有哪些其他语言支持这种语法?
loops - Perl 循环标签算作 GOTO 吗?
通常,避免 GOTO 是一种很好的做法。牢记这一点,我一直在与一位同事就这个话题进行辩论。
考虑以下代码:
使用循环标签算作 goto 吗?
这是perldoc 中的perlsyn必须说的:
以下是 C 程序员如何在 Perl 中编写特定算法的方法:
而下面是一个对这个习惯用法更熟悉的 Perl 程序员可能会这样做的方式:
我对此的看法是否定的,因为您明确告诉循环短路并前进,但是我的同事不同意,说这只是一个花哨的 GOTO,应该避免。我正在寻找一个令人信服的论点或文档来解释为什么这是或不是 GOTO。我也会接受解释为什么这在 perl 中被认为是或不被认为是好的做法。