Instrução If...Then... (Visual Basic)

Execute um grupo de instruções condicionalmente, dependendo do valor de uma expressão.

Sintaxe

' Multiline syntax:
If condition [ Then ]
    [ statements ]
[ ElseIf elseifcondition [ Then ]
    [ elseifstatements ] ]
[ Else
    [ elsestatements ] ]
End If

' Single-line syntax:
If condition Then [ statements ] [ Else [ elsestatements ] ]

Este artigo inclui vários exemplos que ilustram os usos da instrução If...Then...Else:

Partes

condition
Obrigatórios. Expressão. Deve avaliar para True ou False, ou para um tipo de dados implicitamente conversível para Boolean.

Se a expressão for uma variável anulávelBoolean que seja avaliada como Nothing, a condição será tratada como se a expressão fosse False, e os blocos ElseIf serão avaliados se existirem ou se o bloco Else for executado se existir.

Then
Obrigatório na sintaxe de linha única; opcional na sintaxe multilinha.

statements
Opcional. Uma ou mais instruções If...Then a seguir que são executadas se condition for avaliado como True.

elseifcondition
Obrigatório se ElseIf estiver presente. Expressão. Deve avaliar para True ou False, ou para um tipo de dados implicitamente conversível para Boolean.

elseifstatements
Opcional. Uma ou mais instruções ElseIf...Then a seguir que são executadas se elseifcondition for avaliado como True.

elsestatements
Opcional. Uma ou mais instruções executadas se nenhuma expressão condition ou elseifcondition anterior for avaliada como True.

End If
Encerra a versão multilinha do bloco If...Then...Else.

Comentários

Sintaxe multilinha

Quando uma instrução If...Then...Else é encontrada, condition é testada. Se condition for True, as instruções Then a seguir serão executadas. Se condition for False, cada instrução ElseIf (se houver alguma) será avaliada em ordem. Quando um Trueelseifcondition é encontrado, as instruções imediatamente após os ElseIf associados são executadas. Se nenhuma elseifcondition for avaliada como True, ou se não houver instruções ElseIf, as instruções Else a seguir serão executadas. Depois de executar as instruções Then, ElseIf ou Else a seguir, a execução continua com a instrução End If a seguir.

As cláusulas ElseIf e Else são opcionais. Você pode ter quantas cláusulas ElseIf quiser em uma instrução If...Then...Else, mas nenhuma cláusula ElseIf pode aparecer após uma cláusula Else. As instruções If...Then...Else podem ser aninhadas entre si.

Na sintaxe multilinha, a instrução If deve ser a única instrução na primeira linha. As instruções ElseIf, Else e End If podem ser precedidas apenas por um rótulo de linha. O bloco If...Then...Else deve terminar com uma instrução End If.

Dica

A instrução Select...Case pode ser mais útil quando você avalia uma única expressão que tem vários valores possíveis.

Sintaxe de linha única

Você pode usar a sintaxe de linha única para uma única condição com código a ser executada se for verdadeira. No entanto, a sintaxe de várias linhas fornece mais estrutura e flexibilidade e é mais fácil de ler, manter e depurar.

O que segue a palavra-chave Then é examinado para determinar se uma instrução é uma If de linha única. Se algo diferente de um comentário aparecer depois de Then na mesma linha, a instrução será tratada como uma instrução If de linha única. Se Then estiver ausente, ela deverá ser o início de uma If...Then...Else de várias linhas.

Na sintaxe de linha única, você pode ter várias instruções executadas como resultado de uma decisão If...Then. Todas as instruções precisam estar na mesma linha e ser separadas por dois-pontos.

Exemplo de sintaxe multilinha

O exemplo a seguir ilustra o uso da sintaxe multilinha da instrução If...Then...Else.

'Create a Random object to seed our starting value 
Dim randomizer As New Random()
'set our variable
Dim count As Integer = randomizer.Next(0, 5)

Dim message As String

'If count is zero, output will be no items
If count = 0 Then
    message = "There are no items."
    'If count is 1, output will be "There is 1 item.".        
ElseIf count = 1 Then
    message = "There is 1 item."
    'If count is greater than 1, output will be "There are {count} items.", where {count} is replaced by the value of count. 
Else
    message = $"There are {count} items."
End If

Console.WriteLine(message)

'This example displays output like the following:
' There are 4 items.

Exemplo de sintaxe aninhada

O exemplo a seguir contém instruções If...Then...Else aninhadas.

Public Sub Main()
    ' Run the function as part of the WriteLine output.
    Console.WriteLine("Time Check is " & CheckIfTime() & ".")
End Sub

Private Function CheckIfTime() As Boolean
    ' Determine the current day of week and hour of day.
    Dim dayW As DayOfWeek = DateTime.Now.DayOfWeek
    Dim hour As Integer = DateTime.Now.Hour

    ' Return True if Wednesday from 2 to 3:59 P.M.,
    ' or if Thursday from noon to 12:59 P.M.
    If dayW = DayOfWeek.Wednesday Then
        If hour = 14 Or hour = 15 Then
            Return True
        Else
            Return False
        End If
    ElseIf dayW = DayOfWeek.Thursday Then
        If hour = 12 Then
            Return True
        Else
            Return False
        End If
    Else
        Return False
    End If
End Function

'This example displays output like the following:
'Time Check is False.

Exemplo de sintaxe de linha única

O exemplo a seguir ilustra o uso da sintaxe de linha única.

Private Sub SingleLine()

    'Create a Random object to seed our starting values 
    Dim randomizer As New Random()

    Dim A As Integer = randomizer.Next(10, 20)
    Dim B As Integer = randomizer.Next(0, 20)
    Dim C As Integer = randomizer.Next(0, 5)

    'Let's display the initial values for comparison
    Console.WriteLine($"A value before If: {A}")
    Console.WriteLine($"B value before If: {B}")
    Console.WriteLine($"C value before If: {C}")

    ' If A > 10, execute the three colon-separated statements in the order
    ' that they appear
    If A > 10 Then A = A + 1 : B = B + A : C = C + B

    'If the condition is true, the values will be different
    Console.WriteLine($"A value after If: {A}")
    Console.WriteLine($"B value after If: {B}")
    Console.WriteLine($"C value after If: {C}")

End Sub

'This example displays output like the following:
'A value before If: 11
'B value before If: 6
'C value before If: 3
'A value after If: 12
'B value after If: 18
'C value after If: 21

Confira também