Estos operadores simplifican la escritura de expresiones, facilitando la creación de nuestro código. El
resultado empleando operadores abreviados en una expresión, es el mismo que utilizando la sintaxis
normal, pero con un pequeño ahorro en la escritura de código. Cuando pruebe el lector estos ejemplos,
ejecute por separado la sintaxis normal, y después la abreviada, para evitar resultados inesperados.
Buscador
Operadores de concatenación: &, +
Estos operadores permiten unir dos o más cadenas de caracteres para formar una única cadena. Se
recomienda el uso de & para facilitar la legibilidad del código y evitar ambigüedades. El uso de +
puede dar lugar a equívoco, ya que en muchas situaciones no sabremos a primera vista si se está
realizando una suma o concatenación. Ver Código fuente 59.
Dim CadResulta As String
Dim Nombre As String
CadResulta = "esto es " & "una prueba"
Console.WriteLine("Variable CadResulta: {0}", CadResulta)
Nombre = "Juan"
CadResulta = Nombre & " Almendro"
Console.WriteLine("Variable CadResulta: {0}", CadResulta)
Console.ReadLine()
End Sub
Código fuente 59
Resta: -
Sub Main()
Dim Resultado As Integer
Dim Valor As Integer
Dim OtroValor As Integer
' resta de números
Resultado = 100 - 75
' cambiar a signo negativo un número
Valor = -50
' volver a cambiar el signo de un número,
' estaba en negativo, con lo que vuelve
' a positivo
OtroValor = -Valor
End Sub
Código fuente 58
Suma: + (Part 2)
Si cambiamos a continuación la configuración a Option Strict On, la siguiente operación que antes se
ejecutaba, ahora provocará un error. Ver Código fuente 56.
Cadena = "15"
Valor = 20
CadenaResulta = Cadena + Valor ' error
Código fuente 56
' suma de variables
Cadena = "15"
Valor = 20
CadenaResulta = Cadena + CStr(Valor) ' devuelve: "1520"
Código fuente 57
A pesar de que el operador + permite concatenar tipos String, se recomienda el uso del operador
específico de concatenación &, que veremos más adelante.
Suma: + (Part 1)
Sub Main()
Dim Resultado As Double
Dim Cadena As String
Dim Valor As Integer
Dim Nombre As String
Dim CadenaResulta As String
' suma de números
Resultado = 12 + 7 ' devuelve: 19
Resultado = 450 + 130 ' devuelve: 580
' concatenación de cadenas
Cadena = "hola " + "amigos" ' devuelve: "hola amigos"
' suma de variables
Cadena = "15"
Valor = 20
CadenaResulta = Cadena + Valor ' devuelve: "35"
' operaciones incorrectas
Valor = 25
Nombre = "Alfredo"
CadenaResulta = Valor + Nombre ' error
Resultado = Valor + Nombre ' error
End Sub
Código fuente 55
Resto: Mod
Dim Resultado As Double
Resultado = 10 Mod 3 ' devuelve: 1
Resultado = 100 Mod 27 ' devuelve: 19
Resultado = 38 Mod 4 ' devuelve: 2
Código fuente 54
División entera: \
Dim Resultado As Integer
Resultado = 50 \ 3 ' devuelve: 16
Resultado = 250 \ 4 ' devuelve: 62
Código fuente 53
División real: /
Dim Resultado As Double
Resultado = 50 / 3 ' devuelve: 16.6666666666667
Resultado = 250 / 4 ' devuelve: 62.5
Código fuente 52
Por norma general, el valor devuelto será de tipo Double,. No obstante, si uno de los operandos es de
tipo Single, el resultado será de tipo Single. De igual manera, si los dos operandos son del tipo de dato
Decimal, el resultado también será un valor Decimal.
Multiplicación: *
Multiplica dos números. En el caso de que alguno de los operandos sea un valor nulo, se usará como
cero. Ver Código fuente 51.
Dim DatoSinValor As Integer
Dim Indefinido As Object
Resultado = 25 * 5 ' devuelve: 125
' la variable DatoSinValor no ha sido
' asignada, por lo que contiene cero
Resultado = 50 * DatoSinValor ' devuelve: 0
' la variable Indefinido no ha sido
' asignada, por lo que contiene Nothing
Resultado = 25 * Indefinido ' devuelve: 0
Resultado = 24.8 * 5.98 ' devuelve: 148.304
Código fuente 51
Potenciación: ^
Eleva un número a determinada potencia. Debemos situar el número base a la izquierda de este
operador, mientras que el exponente lo situaremos a la derecha.
Podemos realizar varias potenciaciones al mismo tiempo y utilizar números negativos. El valor
devuelto será de tipo Double. Ver Código fuente 50.
Resultado = 12 ^ 5 ' devuelve: 248832
Resultado = 2 ^ 3 ^ 7 ' devuelve: 2097152
Resultado = (-4) ^ 2 ' devuelve: 16
Código fuente 50
Operadores
Los operadores son aquellos elementos del lenguaje que nos permiten combinar variables, constantes,
valores literales, instrucciones, etc., para obtener un valor numérico, lógico, de cadena, etc., como
resultado.
La combinación de operadores con variables, instrucciones, etc., se denomina expresión, mientras que
a los elementos integrantes de una expresión y que no son operadores, se les denomina operandos.
En función de la complejidad de la operación a realizar, o del tipo de operador utilizado, una expresión
puede ser manipulada a su vez como un operando dentro de otra expresión de mayor nivel.
Los operadores se clasifican en las categorías detalladas a continuación, según el tipo de expresión a
construir.
Arrays multidimensionales - III
Empleando For...Next usaremos la función UBound( ) ya comentada antes, con la particularidad de
que al emplearla para arrays multidimensionales, deberemos pasarle en el segundo parámetro el
número de dimensión del que vamos a extraer valores.
Veamos un ejemplo en el Código fuente 49.
Dim Contador1 As Integer
Dim Contador2 As Integer
Articulos(0, 0) = "mesa"
Articulos(0, 1) = "silla"
Articulos(0, 2) = "sofá"
Articulos(0, 3) = "estante"
Articulos(1, 0) = "monitor"
Articulos(1, 1) = "teclado"
Articulos(1, 2) = "impresora"
Articulos(1, 3) = "grabadora"
Articulos(2, 0) = "coche"
Articulos(2, 1) = "tren"
Articulos(2, 2) = "barco"
Articulos(2, 3) = "bicicleta"
For Contador1 = 0 To UBound(Articulos, 1)
Console.WriteLine("Dimensión actual del array: {0}", Contador1)
For Contador2 = 0 To UBound(Articulos, 2)
Console.WriteLine("----Valor del elemento: {0}", Articulos(Contador1,
Contador2))
Next
Next
Código fuente 49
Arrays multidimensionales - II
Como acabamos de ver en el esquema de la figura, el primer número en la declaración del array: 2,
indica la cantidad de dimensiones que tiene el array, y el segundo: 3, indica la cantidad de elementos
que tendrá cada dimensión; ya que los arrays comienzan por cero, en este ejemplo se crea un array de
tres dimensiones, y cada una de esas dimensiones tendrá cuatro elementos. El Código fuente 48
muestra la forma de declarar y asignar valores a un array multidimensional de estas características
Articulos(0, 0) = "mesa"
Articulos(0, 1) = "silla"
Articulos(0, 2) = "sofá"
Articulos(0, 3) = "estante"
Articulos(1, 0) = "monitor"
Articulos(1, 1) = "teclado"
Articulos(1, 2) = "impresora"
Articulos(1, 3) = "grabadora"
Articulos(2, 0) = "coche"
Articulos(2, 1) = "tren"
Articulos(2, 2) = "barco"
Articulos(2, 3) = "bicicleta"
Código fuente 48
Para recorrer los elementos de un array multidimensional utilizaremos los bucles For...Next o For
Each...Next, que se explicarán en un tema más adelante.
La diferencia entre utilizar una u otra técnica para manipular el contenido del array, reside en que con
For...Next tenemos un mayor control de los elementos a manipular, mientras que con For Each...Next,
al implementar internamente el proceso, irá tomando las primeras posiciones de cada una de las
dimensiones del array, después las segundas, y así sucesivamente.
Arrays multidimensionales - I
• Unidimensionales. Se trata de aquel array que tiene una única lista de valores, también denominada dimensión. Es el tipo de array con el que hemos trabajado hasta el momento.
• Multidimensionales. Consiste en un array que dispone de más de una lista de valores o dimensión.
Los arrays multidimensionales se representan en forma de tabla, con filas y columnas, tal y como muestra la Figura 64.
Figura 64. Representación gráfica de un array multidimensional. |
Recorrer un array
Sub Main()
' crear un array y rellenarlo con valores
Dim Nombres(3) As String
Nombres(0) = "Ana"
Nombres(1) = "Pedro"
Nombres(2) = "Antonio"
Nombres(3) = "Laura"
' recorrer el array y mostrar el contenido
' de cada uno de sus elementos
Dim Contador As Integer
For Contador = 0 To UBound(Nombres)
Console.WriteLine("Posición del array: {0}, valor: {1}", _
Contador, Nombres(Contador))
Next
Console.ReadLine()
End Sub
Código fuente 47
Modificación de tamaño
En función de si la cantidad de elementos de un array puede ser cambiada, los arrays se clasifican en
los siguientes tipos:
• Estáticos. Son aquellos que tienen un tamaño fijo y no se pueden modificar.
• Dinámicos. Son aquellos cuya cantidad de elementos puede ser ampliada o reducida.
En
VB.NET todos los arrays son de tipo dinámico
Para modificar el tamaño o número de elementos de un array, emplearemos la instrucción ReDim,
seguida del array a modificar y el nuevo tamaño. En el Código fuente 45, modificamos el tamaño de
un array, añadiéndole dos elementos.
Dim Nombres(3) As String
' asignar valores al array
Nombres(0) = "Ana"
Nombres(1) = "Pedro"
Nombres(2) = "Antonio"
Nombres(3) = "Laura"
' ampliamos el array con 6 elementos: de 0 a 5
ReDim Nombres(5)
Código fuente 45
ReDim no toma el array existente y modifica su número de elementos, sino que internamente crea un
nuevo array con el número de elementos indicado, por lo que se pierden los valores del array previo.
Para solucionar este inconveniente, debemos utilizar junto a ReDim, la palabra clave Preserve. Con
ello, los valores existentes en el array a modificar son conservados. Ver Código fuente 46.
' y los valores de los elementos que hubiera, son conservados
ReDim Preserve Nombres(5)
Código fuente 46
Asignación y obtención de valores
Sub Main()
' array con 4 elementos: de 0 a 3
Dim Nombres(3) As String
' asignar valores al array
Nombres(0) = "Ana"
Nombres(1) = "Pedro"
Nombres(2) = "Antonio"
Nombres(3) = "Laura"
' obtener valores de un array
Dim ValorA As String
Dim ValorB As String
ValorA = Nombres(1) ' Pedro
ValorB = Nombres(3) ' Laura
' mostrar los valores obtenidos del array
Console.WriteLine("Variables: ValorA --> {0}, ValorB --> {1}", ValorA, ValorB)
Console.ReadLine()
End Sub
Código fuente 44
Declaración - II
Figura 63. Declaración de un array. |
Declaración - I
Para declarar un array actuaremos prácticamente igual que para declarar una variable normal, con la
diferencia de que utilizaremos los paréntesis junto al nombre de la variable, para indicar que se trata de
un array, y opcionalmente, dentro de los paréntesis, indicaremos el número de elementos de que
inicialmente va a constar el array.
También es posible, asignar valores a los elementos en el mismo
momento de su declaración.
Debemos tener en cuenta a la hora de establecer el número de elementos, que el primer índice de un
array es el cero, por lo que al ser creado, el número real de elementos en un array será el especificado
en la declaración más uno.
La Figura 63 muestra un esquema de la declaración de un array.
A continuación vemos unos ejemplos de creación de arrays en el Código fuente 43.
' array sin elementos
Dim Colores() As String
' array con 4 elementos vacíos: de 0 a 3
Dim Nombres(3) As String
' array con 3 elementos, cuyos valores asignamos
' en el momento de la declaración del array
Dim Frutas() As String = {"Manzana", "Naranja", "Pera"}
End Sub
Código fuente 43
Arrays
A cada elemento del array se accede mediante un índice, que indica el número de posición que ocupa dicho elemento dentro del array. Si tuviéramos que representar un array gráficamente, podríamos hacerlo mediante un conjunto de casillas, en cada una de las cuales se encontraría un elemento del array. Cada casilla tendría un número (índice) que identificaría de forma única su posición. Ver Figura 62.
Figura 62. Representación gráfica de un array. |
Depuración del código en ejecución II
Figura 60. Visualizando el contenido de una variable durante la depuración. |
Figura 61. Ventana Locales del depurador. |
Depuración del código en ejecución I
Figura 59. Configuración del perfil del programador en el IDE. |
Una vez configurado nuestro perfil de trabajo, sigamos con las cuestiones referentes al depurador.
Un depurador nos permite introducirnos dentro del código de nuestro programa durante la ejecución
del mismo, para observar qué es lo que está ocurriendo: ejecutar línea a línea el programa, observar el
valor de las variables, etc., aspectos todos ellos fundamentales para el seguimiento de errores y fallos
en la lógica de la aplicación.
VS.NET dispone de un excelente depurador; del que describiremos a continuación sus elementos más
básicos, para que el lector pueda realizar un seguimiento más preciso de lo que sucede durante la
ejecución de su aplicación.
Introducción a los arrays. Operadores
Depuración del código en ejecución
Para comprobar el resultado de los ejemplos realizados hasta el momento hemos utilizado la salida a
consola. Sin embargo esto no es suficiente información para el programador a la hora de desarrollar
una aplicación.
Un lenguaje o entorno de programación ha de proporcionar al programador utilidades que le permitan
comprobar cómo se ejecuta el código de la aplicación línea por línea, información sobre el contenido
de las variables, expresiones, puntos de interrupción en la ejecución, etc. Al conjunto de todas estas
técnicas o utilidades que debe aportar el lenguaje se le denomina depurador.
El entorno de Visual Studio .NET aporta un depurador muy completo, del que vamos a mostrar en este
apartado algunas de sus funcionalidades básicas, dejando para un tema posterior un estudio más
completo de esta herramienta.
Ya que algunas características del depurador y de otros elementos se realizan mediante combinaciones
de teclado, es recomendable configurar el IDE al perfil de programador más adecuado, o con el que
nos encontremos más cómodos.
Para configurar el perfil del usuario de VS.NET debemos situarnos en la pestaña correspondiente a la
página de inicio del IDE (Start). Si hemos cerrado esta ventana o pestaña podemos abrirla de nuevo
muy fácilmente mediante la opción de menú del IDE Ayuda + Mostrar página de inicio. Ver Figura
58.Figura 58. Pestaña Página de inicio en la ventana principal del IDE. |
Constantes - III
En el anterior ejemplo, realizamos el descuento utilizando directamente el valor a descontar. Si en un
momento dado, necesitamos cambiar dicho valor de descuento, tendremos que recorrer todo el código
e ir cambiando en aquellos lugares donde se realice esta operación.
Empleando una constante para el descuento, y utilizando dicha constante en todos aquellos puntos del
código en donde necesitemos aplicar un descuento, cuando debamos modificar el descuento, sólo
necesitaremos hacerlo en la línea en la que declaramos la constante. Ver Código fuente 42.
' crear constante para calcular descuento
Const DESCUENTO As Integer = 100
' venta de productos
Dim Importe As Double
Dim TotalVenta As Double
Console.WriteLine("Introducir importe de la venta")
Importe = Console.ReadLine()
' aplicar descuento sobre la venta, atención al uso de la constante
TotalVenta = Importe - DESCUENTO
Console.WriteLine("El importe de la venta es: {0}", TotalVenta)
Console.WriteLine()
' .............
' .............
' .............
' factura de mercancías
Dim PrecioArt As Double
Dim TotalFactura As Double
Console.WriteLine("Introducir precio del artículo")
PrecioArt = Console.ReadLine()
' aplicar descuento a la factura, atención al uso de la constante
TotalFactura = PrecioArt - DESCUENTO
Console.WriteLine("El total de la factura es: {0}", TotalFactura)
Console.WriteLine()
' .............
' .............
' .............
Console.ReadLine()
End Sub
Código fuente 42
Constantes - II
Supongamos como ejemplo, que hemos escrito un programa en el que se realiza una venta de
productos y se confeccionan facturas. En ambas situaciones debemos aplicar un descuento sobre el
total resultante. Ver Código fuente 41.
' venta de productos
Dim Importe As Double
Dim TotalVenta As Double
Console.WriteLine("Introducir importe de la venta")
Importe = Console.ReadLine()
' aplicar descuento sobre la venta
TotalVenta = Importe - 100
Console.WriteLine("El importe de la venta es: {0}", TotalVenta)
Console.WriteLine()
' .............
' .............
' .............
' factura de mercancías
Dim PrecioArt As Double
Dim TotalFactura As Double
Console.WriteLine("Introducir precio del artículo")
PrecioArt = Console.ReadLine()
' aplicar descuento a la factura
TotalFactura = PrecioArt - 100
Console.WriteLine("El total de la factura es: {0}", TotalFactura)
Console.WriteLine()
' .............
' .............
' .............
Console.ReadLine()
End Sub
Código fuente 41
Constantes - I
Al igual que las variables, una constante es un elemento del lenguaje que guarda un valor, pero que en
este caso y como su propio nombre indica, dicho valor será permanente a lo largo de la ejecución del
programa, no pudiendo ser modificado.
Para declarar una constante, debemos utilizar la palabra clave Const, debiendo al mismo tiempo
establecer el tipo de dato y asignarle valor. Ver Código fuente 40.
Const Color As String = "Azul"
Const ValorMoneda As Double = 120.48
End Sub
Código fuente 40
La tipificación de una constante se rige, al igual que las variables, por la configuración que tengamos
establecida para la instrucción Option Strict.
Si intentamos asignar un valor a una constante después de su asignación inicial, el IDE nos subrayará
la línea con un aviso de error de escritura, y se producirá igualmente un error si intentamos ejecutar el
programa. Ver Figura 57Figura 57. No es posible asignar valores a constantes después de su creación. |
Grabación del código modificado
Cuando editamos el código fuente de nuestro programa, es conveniente cada cierto tiempo, cuanto más
frecuente, mejor, grabar a disco el archivo o archivos de código modificados.
Para ello podemos elegir
la opción de menú del IDE Archivo + Guardar NombreFichero o la combinación de teclas
[CONTROL + S]. Esta costumbre nos puede ahorrar serios disgustos en el caso de un apagón imprevisto del equipo cuando estamos en plena modificación de un programa y no hemos guardado
los cambios realizados.
De forma automática, el IDE graba los archivos del programa a disco cada vez que ejecutamos el
proyecto, lo cual también supone una gran ayuda.
Avisos del IDE sobre errores en el código
Figura 56. Código con errores subrayado por el IDE. |
Estos avisos constituyen una gran ayuda, ya que permiten al programador observar problemas en la
escritura del código, antes incluso de ejecutar el programa.
Existen multitud de avisos de muy diversa naturaleza, teniendo en cuenta que la tónica general
consiste en que el código problemático quedará subrayado por el IDE hasta que no modifiquemos la
línea en cuestión y la escribamos correctamente.
Tipificación obligatoria - III
Si queremos que no se produzcan errores de conversión en el anterior código fuente, tendremos que
emplear las funciones de conversión de tipo, o el objeto Convert, que proporciona el lenguaje. En este
caso utilizaremos CInt( ), a la que pasamos un valor numérico como parámetro, y devuelve un tipo
numérico Integer; y CStr( ), que convierte a String el valor que pasemos como parámetro. Consulte el
lector el conjunto de funciones de conversión en la documentación de .NET Framework para una
descripción detallada. Veamos el resultado en el Código fuente 39.
' ahora es obligatorio establecer
' el tipo de dato a todas las variables
Dim Valor As Integer
Dim TotalGeneral As Double
Dim Dato As String
TotalGeneral = 500
Valor = CInt(TotalGeneral) ' conversión de tipos
Dato = CStr(TotalGeneral) ' conversión de tipos
End Sub
Código fuente 39
Establecer Option Strict On requiere un mayor trabajo por parte del programador, ya que ha de ser más
cuidadoso y escribir un código más correcto y preciso, lo cual es muy conveniente. Sin embargo, ya
que la opción por defecto en este sentido es Option Strict Off, los ejemplos realizados a lo largo de
este texto se ajustarán en este particular a dicha configuración, con ello ganamos en comodidad, ya
que evitaremos la obligación de realizar conversiones de tipos en muy diversas situaciones.