VB.NET 中的 GoTo 语句和替代语句

2024-02-14

我在另一个论坛上发布了一个代码片段寻求帮助,人们向我指出使用GoTo语句是非常糟糕的编程习惯。我想知道:为什么会不好呢?

有什么替代方案GoTo在 VB.NET 中是否可以使用通常被认为是更好的实践?

考虑下面的这个片段,用户必须输入他们的出生日期。如果月/日/年无效或不切实际,我想返回并再次询问用户。 (我正在使用 if 语句来检查整数的大小...如果有更好的方法来执行此操作,如果您也能告诉我,我将不胜感激:D)

retryday:
    Console.WriteLine("Please enter the day you were born : ")
    day = Console.ReadLine
    If day > 31 Or day < 1 Then
        Console.WriteLine("Please enter a valid day")
        GoTo retryday
    End If

我要与其他人不同的是,GOTO 本身并不都是邪恶的。罪恶来自于对 GOTO 的滥用。

一般来说,几乎总是有比使用 GOTO 更好的解决方案,但有时 GOTO 确实是正确的方法。

话虽这么说,你是一个初学者,所以在接下来的几年里,你不应该被允许判断 GOTO 是否正确(因为它几乎从来没有正确过)。

我会这样写你的代码(我的VB有点生疏了......):

Dim valid As Boolean = False

While Not valid
    Console.WriteLine("Please enter the day you were born: ")

    Dim day As String

    day = Console.ReadLine

    If day > 31 Or day < 1 Then
        Console.WriteLine("Please enter a valid day.")
    Else
        valid = True
    End If
End While

如果您查看 GOTO 代码并查看它,人们首先会如何处理您的代码? “嗯..重试日?这有什么作用?什么时候发生?哦,所以如果日期超出范围,我们就转到该标签。好的,所以我们要循环,直到日期被认为是有效且在范围内” 。

而如果你看看我的:

“哦,我们想继续这样做直到它有效。当日期在范围内时它是有效的。”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

VB.NET 中的 GoTo 语句和替代语句 的相关文章

随机推荐

  • AngularJS - 过滤空对象

    我有一个包含大量数据的 scope myData 对象 我想做的是显示数据但过滤掉空值和空字符串 scope myData ID 001 Message test test test test ID 002 Message test tes
  • 禁用先前日期但将字段留空?

    我正在设置minDate now 以防止选择当前日期之前的日期 但是 这会使用当前日期填充该字段 不一定是大问题 但是 如果我在字段上执行验证 即 它已填充 那么即使没有选择日期 用户仍然可以提交 有什么办法解决这个问题吗 编辑 抱歉 但似
  • 从 C# 流中读取无符号 24 位整数

    使用 BinaryReader 从 C 流读取无符号 24 位整数的最佳方法是什么 到目前为止我用过这样的东西 private long ReadUInt24 this BinaryReader reader try return Math
  • 安装 Tidy、PHP

    我猜当 php 安装在我的盒子上时 没有包含 with tidy arg 当浏览我的 php ini 时 该行 extension php tidy dll 不见了 如何将模块添加到我的 php 安装中 注意我尝试添加 extension
  • Vaadin 网格行高

    我想减小单元格大小 以便在屏幕上容纳更多行 屏幕 1 到目前为止我已经用过 v grid cell font size 13px height 18px vertical align middle v grid row height 18p
  • android - 在两个网络视图之间共享会话?

    首先 有人可以解释一下怎么做吗CookieManager getInstance 工作 我真的不明白如何从 webview 获取会话 假设我有这个 CookieSyncManager createInstance WebviewPage t
  • 全局和本地 python 安装,以及意外在 virtualenv 之外运行需求文件

    所以我在谷歌上搜索了一个 pip 需要 sudo 权限的事件 我遇到了以下两个线程运行 sudo pip 有哪些风险 https stackoverflow com questions 21055859 what are the risks
  • 通过文本和文件流保存 openpyxl 文件

    我正在将 OpenPyXL 构建到一个应用程序中 该应用程序需要一个包含 excel 文件内容的字符串 以便通过文件流写入 根据我对 OpenPyXL 源代码的调查 它看起来并不支持这种输出 有谁有修改 openpyxl 以支持这一点的经验
  • 如何检查特定的子解析器?

    如何检查特定的子解析器 import argparse if name main mainparser argparse ArgumentParser submainadder mainparser add subparsers title
  • Javascript:根据其内容选择选项

    基本上是这样 但是在纯 JavaScript 中 如何使用 Nokogiri 根据选择标签的内容获取选择标签的 值 https stackoverflow com questions 2346257 how to get value of
  • 判断 NSNumber 是否为 NaN

    如何判断可可是否NSNumber表示 NaN 不是一个数字 例如 当我解析具有无效 非数字 内容的字符串时 就会出现这种情况 所以 我发现类属性 NSDecimalNumber notANumber 就是为了这个目的 在某些语言中 NaN
  • 按 ID DESC 排序

    我试图让博客页面按降序给出的自动递增唯一 ID 对其条目进行排序 但它似乎不允许这样做 尽管 SQL 请求如下所示 但它始终按升序显示 SELECT FROM news blog ORDER BY news id DESC 是不是因为新闻i
  • 我可以配置 NLog 在日志达到一定限制后修剪日志吗?

    NLog 可以配置为在日志文件达到一定文件大小后自动修剪 修剪日志文件吗 我认为您最接近的目标是使用archiveAboveSize属性让 NLog 在日志文件达到一定大小时对其进行归档 通过将其与maxArchiveFiles属性 您可以
  • 请解释一下Labeled statements的用法

    Java 中标记语句的唯一用途是中断和继续吗 您什么时候在程序中使用过标签语句 抱歉 代码片段已被删除 我正在拆分问题 JLS 14 7 标签语句 https docs oracle com javase specs jls se14 ht
  • ASP.NET MVC 自定义 ModelMetadataProvider 和 ModelValidatorProvider

    在我的 ASP NET MVC 应用程序中 我在数据库中定义了基于元数据的模型 我有一个定义数据元数据的自定义对象 并使用数据集进行 DTO 为了显示这一点 我计划编写一个自定义 ModelMetadataProvider 和 ModelV
  • 在 PyCUDA 中迭代二维数组

    我试图在 PyCUDA 中迭代一个 2D 数组 但最终得到了重复的数组值 我最初抛出一个小的随机整数数组 它按预期工作 但是当我向它抛出图像时 我一遍又一遍地看到相同的值 这是我的代码 img np random randint 20 si
  • 为什么这个查询使用where而不是索引?

    EXPLAIN EXTENDED SELECT board FROM board WHERE board category id 5 AND board board id 0 AND board display 1 ORDER BY boa
  • 应用 Angular2 ngModel 后格式化输入值

    我正在尝试创建一个指令 将输入值格式化为货币格式 我能够在焦点和模糊上做我必须做的事情 并且在 ngOnInit 钩子 和任何其他钩子 中 输入元素尚未应用任何值 如何 监视 输入的值 并在应用初始值时对其进行格式化 这是我的指令 impo
  • CloudFormation:模板 RDS Mysql 以创建数据库、表、用户或加载架构

    我正在尝试使用 CloudFormation 找出一些用例 第一种情况是拥有现有的 AWS RDS MySQL 服务器 如何通过 CloudFormation 模板创建数据库 表和用户帐户 在查看了 Cloudformation 文档之后
  • VB.NET 中的 GoTo 语句和替代语句

    我在另一个论坛上发布了一个代码片段寻求帮助 人们向我指出使用GoTo语句是非常糟糕的编程习惯 我想知道 为什么会不好呢 有什么替代方案GoTo在 VB NET 中是否可以使用通常被认为是更好的实践 考虑下面的这个片段 用户必须输入他们的出生