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

qai*_*ais 9 vb.net goto

我在另一个论坛上发布了一个代码片段,寻求帮助,人们向我指出,使用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
Run Code Online (Sandbox Code Playgroud)

Ear*_*rlz 18

我将与其他人不同,并说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
Run Code Online (Sandbox Code Playgroud)

如果您使用GOTO代码并查看它,有人会如何处理您的代码?"嗯... retryday?这是做什么的?这是什么时候发生的?哦,所以如果当天超出范围我们就转到那个标签.好的,所以我们想循环直到日期被认为是有效的并且在范围内" .

如果你看看我的:

"哦,我们希望继续这样做,直到它有效.它在日期在范围内时有效."


And*_*ndy 6

http://xkcd.com/292/ 我认为这是Goto的标准意见.

而是尝试使用do while循环.while while循环将始终执行一次,并且当您需要支持用户时很好,但请确保它们输入正确的信息.

Sub Main()
    Dim valid as Integer
    valid=0
    Do Until valid = 1
    System.Console.WriteLine("enter the day ")
    day = System.Console.ReadLine()
    If day > 31 Or day < 1 Then
       System.Console.WriteLine("Invalid day\n")
       valid = 0;
    Else
       valid = 1

    Loop

End Sub
Run Code Online (Sandbox Code Playgroud)