Instrucción If...Then...Else (Visual Basic)
Ejecuta condicionalmente un grupo de instrucciones en función del valor de una expresión.
Sintaxis
' Multiline syntax:
If condition [ Then ]
[ statements ]
[ ElseIf elseifcondition [ Then ]
[ elseifstatements ] ]
[ Else
[ elsestatements ] ]
End If
' Single-line syntax:
If condition Then [ statements ] [ Else [ elsestatements ] ]
Vínculos rápidos al código de ejemplo
En este artículo se incluyen varios ejemplos que ilustran los usos de la instrucción If
...Then
...Else
:
Partes
condition
Necesario. Expresión. Debe evaluarse como True
o False
, o en un tipo de datos que se pueda convertir implícitamente a Boolean
.
Si la expresión es una variable Boolean
que admite un valor NULL y se evalúa como Nothing, la condición se trata como si la expresión fuera False
y los bloques de ElseIf
se evalúan si existen, o el bloque de Else
se ejecuta si existe.
Then
Obligatorio en la sintaxis de una sola línea; opcional en la sintaxis multilínea.
statements
Opcional. Una o varias instrucciones que siguen a If
...Then
y se ejecutan si condition
se evalúa como True
.
elseifcondition
Obligatorio si ElseIf
está presente. Expresión. Debe evaluarse como True
o False
, o en un tipo de datos que se pueda convertir implícitamente a Boolean
.
elseifstatements
Opcional. Una o varias instrucciones que siguen a ElseIf
...Then
y se ejecutan si elseifcondition
se evalúa como True
.
elsestatements
Opcional. Una o varias instrucciones que se ejecutan si ninguna expresión condition
o elseifcondition
anterior se evalúa como True
.
End If
Finaliza la versión multilínea del bloque If
...Then
...Else
.
Comentarios
Sintaxis multilínea
Cuando se encuentra una instrucción If
...Then
...Else
, se prueba condition
. Si condition
es True
, se ejecutan las instrucciones que siguen a Then
. Si condition
es False
, cada instrucción ElseIf
(si hay alguna) se evalúa en orden. Cuando se encuentra un elemento True
elseifcondition
, se ejecutan las instrucciones que siguen inmediatamente al elemento ElseIf
asociado. Si ningún elseifcondition
se evalúa como True
, o si no hay ninguna instrucción ElseIf
, se ejecutan las instrucciones que siguen a Else
. Después de ejecutar las instrucciones que siguen a Then
, ElseIf
o Else
, la ejecución continúa con la instrucción que sigue a End If
.
Las dos cláusulas ElseIf
y Else
son opcionales. Puede tener tantas cláusulas ElseIf
como quiera en una instrucción If
...Then
...Else
, pero ninguna cláusula ElseIf
puede aparecer después de una cláusula Else
. Las instrucciones If
...Then
...Else
se pueden anidar entre sí.
En la sintaxis multilínea, la instrucción If
debe ser la única instrucción de la primera línea. Las instrucciones ElseIf
, Else
y End If
solo pueden ir precedidas por una etiqueta de línea. El bloque If
...Then
...Else
debe terminar con una instrucción End If
.
Sugerencia
La instrucción Select...Case puede ser más útil cuando se evalúa una expresión única que tiene varios valores posibles.
Sintaxis de una sola línea
Puede usar la sintaxis de una sola línea para una condición única con código para ejecutarse si es True. Sin embargo, la sintaxis de varias líneas proporciona más estructura y flexibilidad y es más fácil de leer, mantener y depurar.
Lo que sigue a la palabra clave Then
se examina para determinar si una instrucción es If
de una sola línea. Si aparece algo distinto de un comentario después de Then
en la misma línea, la instrucción se trata como una instrucción If
de una sola línea. Si Then
no está presente, debe ser el inicio de If
...Then
...Else
multilínea.
En la sintaxis de una sola línea, puede ejecutar varias instrucciones como resultado de una decisión If
...Then
. Todas las instrucciones deben estar en la misma línea y deben aparecer separadas por dos puntos.
Ejemplo de sintaxis multilínea
En el siguiente ejemplo se muestra el uso de la sintaxis multilínea de la instrucción 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.
Ejemplo de sintaxis anidada
El ejemplo siguiente contiene instrucciones If
...Then
...Else
anidadas.
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.
Ejemplo de sintaxis de una sola línea
En el siguiente ejemplo se muestra el uso de la sintaxis de una sola línea.
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