Поймите плюсы и минусы заявления GoTo - PullRequest
0 голосов
/ 14 января 2019

Я работаю в Excel vba уже 3 месяца, и это (после одного курса программирования в университете) мой первый реальный контакт с программированием. Пожалуйста, примите это к сведению.

Я создал пользовательскую форму со многими текстовыми полями. Поэтому я написал макрокоманду, которая сначала проверяет, вставил ли пользователь значение в каждое текстовое поле, чтобы потом начать процедуру. Если в каждом текстовом поле нет значения, я хочу, чтобы выходная подпрограмма после msgbox снова заполняла каждое текстовое поле. Тихо просто, верно?

Я подумал, что лучший способ справиться с этим - использовать Go to заявление. После показа моему боссу кода, который он сказал мне, я никогда не должен использовать это утверждение, чтобы избежать какого-либо спагетти-кода. Он сказал мне, настоящий программист никогда не будет использовать это утверждение и попытается обойти его. Вот как выглядит мой код:

Private Sub SaveButton_Click()

    Dim i               As Integer

    'mandatory textboxes:
    For i = 1 To 13
    If UserForm1.Controls("Textbox" & i) = "" Then: GoTo again
    Next

   'procedure...
    Exit Sub

again:
    MsgBox "Please fill in every mandatory textbox"

End Sub

Мой вопрос : правильно ли избегать этого утверждения в любой ситуации? Это действительно какое-то невысказанное правило никогда не использовать это утверждение? Каковы плюсы и минусы этого, и каковы мои альтернативы (особенно в этом случае)?

Я ценю каждый полезный ответ. Спасибо!

Ответы [ 2 ]

0 голосов
/ 14 января 2019

Ваш код может быть легко переписан, как показано ниже:

Private Sub SaveButton_Click()

    Dim i               As Integer

    'mandatory textboxes:
    For i = 1 To 13
        If UserForm1.Controls("Textbox" & i) = "" Then
            MsgBox "Please fill in every mandatory textbox"
            Exit Sub
        End If
    Next

End Sub

Никогда не используйте GoTo, если оно не отстает от On Error … или его нельзя избежать. Если есть шанс избежать GoTo, то избегайте его. Это делает ваш код сложным в обслуживании и считается плохой практикой.

Как указал GSerg, могут быть редкие случаи, когда GoTo нельзя избежать. Например. использование GoTo для эмуляции отсутствующих языковых конструкций (например, в VBA отсутствует ключевое слово Continue ) и преждевременное завершение глубоко вложенных циклов.

0 голосов
/ 14 января 2019

Можно переписать таким образом. Таким образом, ниже goto заменяется на Exit For, а затем на последующий тест. Избегайте перехода, если только в выражении On Error Goto <lable>.

Private Sub SaveButton_Click()

    Dim i               As Integer

    Dim bGut As Boolean: bGut = True
    'mandatory textboxes:
    For i = 1 To 13
        If UserForm1.Controls("Textbox" & i) = "" Then 

            bGut = False
            Exit For '* skip out
        End If
    Next

    If Not bGut Then
        MsgBox "Please fill in every mandatory textbox"

    Else
        '* start processing
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...