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

我在另一个论坛上发布了一个代码片段,要求帮助,人们向我指出,使用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代码看看,那么有人首先接近你的代码呢? “嗯..重试?这是做什么的?什么时候发生?哦,所以我们去那个标签,如果一天超出范围,好的,所以我们想循环,直到日期被认为是有效的,在范围内” .

而如果你看我的:

“哦,我们要继续这样做,直到它有效,当日期在范围内时才有效.”

相关文章

Format[$] ( expr [ , fmt ] ) format 返回变体型 format$ 强...
VB6或者ASP 格式化时间为 MM/dd/yyyy 格式,竟然没有好的办...
在项目中添加如下代码:新建窗口来显示异常信息。 Namespace...
转了这一篇文章,原来一直想用C#做k3的插件开发,vb没有C#用...
Sub 分列() ‘以空格为分隔符,连续空格只算1个。对所选...
  窗体代码 1 Private Sub Text1_OLEDragDrop(Data As Dat...