)XQGDPHQWRVGH 3URJUDPDFLÜQ



1.

PROGRAMACIÓN ESTRUCTURADA

La Programación Estructurada consiste en un conjunto de técnicas que emplea un número limitado de estructuras de control y cuyo objetivo es reducir la complejidad de los problemas y minimizar los errores. La programación estructurada incorpora: ‡ diseño descendente (top-down) ‡ recursos abstractos ‡ estructuras básicas

DISEÑO DESCENDENTE (TOP-DOWN)
El diseño descendente es la técnica que permite descomponer un problema complejo en problemas más sencillos, realizándose esta operación de forma sucesiva hasta llegar al nivel mínimo de abstracción en el cual se pueden codificar las operaciones en un lenguaje de programación. Cada nivel de abstracción define de forma más concreta el problema y subdivide las operaciones en otras menos abstractas. Con esta técnica se crean distintos niveles de refinamiento que se representan de la siguiente forma:

El Nivel 0 es el más abstracto, es la descripción funcional del problema. El último nivel es el que permite la codificación en un lenguaje de programación concreto. Ejemplo: Algoritmo que tiene como objetivo calcular la media de las notas de una clase

Visual Basic .Net | PROGRAMACIÓN ESTRUCTURADA

2

RECURSOS ABSTRACTOS
El concepto de recurso abstracto es fundamental en la evolución de los lenguajes de programación. Este concepto hace referencia a la visión que se tiene de cada refinam iento en el diseño Top-Down ya que en cada paso se consideran tan sólo aquellos datos importantes para el nivel en el que estamos, obviando el resto -que se resolverán en los siguientes refinamientos-.

TEOREMA DE LA PROGRAMACIÓN ESTRUCTURADA
Un programa que utiliza la técnica de programación estructurada debe ser escrito utilizando sólo tres tipos de estructuras de control: secuenciales, selectivas y repetitivas. y

Secuencia: Indica que las instrucciones se ejecutan una después de la otra, en el mismo orden en el cual aparecen en el programa. Se representa gráficamente como una caja después de otra, ambas con una sola entrada y una única salida.

y

Selección: Plantea la selección entre dos alternativas con base en el resultado de la evaluación de una condición o predicado; equivale a la instrucción IF de todos los lenguajes de programación y se representa gráficamente de la siguiente manera :

En las estructuras de selección siempre se examina una condición y en función de su evaluación la secuencia de ejecución continúa por una rama y otra, es decir, se ejecuta el bloque A si la condición C es verdadera y el bloque B si es falsa. y

Iteración: Representa la ejecución repetida de una instrucción mientras que se cumple una determinada condición. El diagrama de flujo para esta estructura es el siguiente:

Visual Basic .Net | PROGRAMACIÓN ESTRUCTURADA

3

Aquí el bloque A se ejecuta repetidamente mientras que la condición C se cumpla o sea cierta. También tiene una sola entrada y una sola salida; igualmente A puede ser cualquier estructura básica o conjunto de estructuras.

ETIQUETAS E INSTRUCCIÓN GO-TO
Ocasionalmente se habla de la programación estructurada como una técnica de programación que no utiliza go-to (instrucción de desvío del flujo de control en forma incondicional).

Algunas veces puede estar justificado el uso de go-to, pero esto ocurre en muy raras situaciones y siempre puede ser sustituido por otras sentencias.

VENTAJAS DE LA PROGRAMACIÓN ESTRUCTURADA
Con la programación estructurada obtenemos las siguientes ventajas: y y y

Un programa estructurado no solamente tendrá una estructura, sino también una excelente presentación. Un programa estructurado tiende a ser mucho más fácil de comprender que programas escritos en otros estilos. La facilidad de comprensión del contenido de un programa puede facilitar el chequeo de la codificación y reducir el tiempo de prueba y depuración de programas. Un programa que es fácil para leer y el cual está compuesto de segmentos bien definidos tiende a ser simple, rápido y menos expuesto a mantenimiento.

y

PROGRAMACION MODULAR
En la programación modular el programa es dividido en módulos. Cada módulo realiza una terea específica y se codifica independientemente de los otros módulos. Cada módulo es analizado, codificado y puesto a punto por separado. Los programas contienen un módulo denominado módulo principal, el cual supervisa todo lo que sucede, transfiriendo el control a submódulos (los que son denominados subprogramas), para que puedan realizar sus funciones. Sin embargo, cada submódulo devolverá el control al módulo principal una vez completada su tarea. Si las tareas asignadas a cada submódulo son demasiado complejas, se procederá a una nueva subdivisión en otros módulos más pequeños.

Visual Basic .Net | PROGRAMACIÓN ESTRUCTURADA

4

En cuanto a la seguridad podemos decir que los módulos son independientes, de modo que ningún módulo puede tener acceso directo a cualquier otro módulo, excepto el módulo al que llama y sus submódulos correspondientes. Sin embargo, los resultados producidos por un módulo pueden ser utilizados por otro módulo cuando se transfiera a ellos el control. Dada la ventaja de ser independientes el programa puede ser trabajado por diferentes programadores a la vez. Con esto se ahorra tiempo en el diseño del algoritmo y en su posterior codificación. También un módulo puede ser codificado sin afectar a los demás, incluso sin alterar su función principal. Los módulos toman diferentes nombres, según el lenguaje de programación en el cual estén expresados: ‡ Subrutinas en BASIC, ‡ Procedimientos en Pascal, subrutinas en FORTRAN, ‡ Secciones en COBOL y ‡ Funciones en general en todos los lenguajes.

Visual Basic .Net | PROGRAMACIÓN ESTRUCTURADA

5

2.

APLICACIONES DE CONSOLA EN .NET

Una aplicación de consola es aquella que se ejecuta en una pantalla del tipo MS-DOS, ahora denominada interfaz de línea de órdenes. Para crear un proyecto de consola se debe abrir Visual Studio y hacer clic sobre Archivo>Nuevo Proyecto y a continuación seleccionar la plantilla Aplicación de consola.

La plantilla de Aplicación de consola abre un fichero con el siguiente código

Todos los programas de consola de Visual Basic .NET se basan en la definición de un módulo. Para definir un módulo se utiliza la palabra reservada Module que finaliza con End Module. En el interior del módulo se integran todas las órdenes del programa. El procedimiento de entrada al programa es la definida con la cabecera Sub Main() que finaliza con End Sub. Cuando se compila un programa VB .NET espera que exista un procedimiento Main donde se define el punto de entrada y salida del programa. Sobre la plantilla de Aplicación de consola se deben realizar todas las incorporaciones de código necesarias para que el programa realice las operaciones que se demandan. En primer lugar se debe cambiar el nombre Module1 por otro más significativo que esté relacionado con la funcionalidad del programa, por ejemplo, para un pequeño programa que muestre un mensaje ³Hola mundo´ podemos llamarle Saludo. Todos los programas deben tener comentarios que documenten el código. Los comentarios se deben introducir con el símbolo µ como primer carácter.
µEste es mi primer programa

Dentro del procedimiento Main se deben incorporar las órdenes del lenguaje de programación que deseamos que se ejecuten en el programa. Por ejemplo, para emitir un mensaje debemos utilizar la orden System.Console.WriteLine.
System.Console.WriteLine(³Hola mundo´)

Para que el mensaje permanezca en pantalla hasta que se pulse la tecla Enter se debe introducir la siguiente instrucción:
System.Console.ReadLine()

Visual Basic .Net | APLICACIONES DE CONSOLA EN .NET

6

Finalmente el programa queda como se muestra a continuación

Podemos mejorar el programa incorporando la orden
Imports nombreNamespace

Esta orden se utiliza para importar espacios de nombres (namespaces). Dicha orden ser utilizará al principio del fichero para indicar al módulo que si no encuentra una clase en el espacio de nombres actual, la busque en una de las que se han definido con Imports. Si importamos el namespace System, por ejemplo, ya no será necesario escribir System en las órdenes que utilicen este namespace y el código del programa quedaría como sigue:

Guardar un programa
Después de crear el programa se debe guardar utilizando las entradas del menú Archivo>Guardar

Compilar y ejecutar un programa
Todo programa debe ser compilado, esta operación provoca que el programa fuente se traduzca a código intermedio (IL) para poder ejecutarlo posteriormente. El IDE de Visual Studio permite realizar la compilación y ejecución en un paso, utilizando las entradas del menú Depurar>Iniciar depuración (F5). Al ejecutar el programa del ejemplo se vería una ventana similar a la siguiente:

Visual Basic .Net | APLICACIONES DE CONSOLA EN .NET

7

SALIDA POR PANTALLA DE VARIOS DATOS
Si es necesario mostrar varios datos en una misma línea en la salida por pantalla se puede utilizar un operador de concatenación (&) ' concatenar múltiples valores ' declarar variables Dim Nombre As String Dim Edad As Integer ' asignar valor a las variable s Nombre = "Lola" Numero = 35 Console.WriteLine& Nombre & " tiene " & Numero & " años") Console.ReadLine()

DIVISIÓN DE UNA LÍNEA DE CÓDIGO
Si una instrucción es muy larga es posible dividirla en varias líneas utilizando el carácter de guión bajo ( _ ) en el punto de la línea de código en donde queremos continuar, teniendo en cuenta que siempre debe haber un espacio en blanco antes y después de este carácter, para que la división de la línea sea efectiva.

Ejemplo
Dim Resultado As Boolean ' una sola línea lógica y física Resultado = ((30 + 5) * 5 > 100) And (52 > 200 / (2 + 5)) ' varias líneas físicas, aunque internamente ' el compilador reconoce una sola línea lógica Resultado = ((30 + 5) * 5 > 100) And _ (52 > 200 / _ (2 + 5))

PRÁCTICAS
1. Crear un programa que muestre tu nombre, tus apellidos y tu fecha de nacimiento en una misma línea.

Visual Basic .Net | APLICACIONES DE CONSOLA EN .NET

8

3.

VARIABLES Y EXPRESIONES

DECLARACIÓN DE VARIABLES
Las variables declaradas en métodos, propiedades o indizadores se llaman variables locales. Una variable es un dato temporal en memoria que tiene un nombre, un tipo de dato, un ámbito y un alcance, los cuales lo dan forma como se declare esta. Las variables pueden ser modificadas a lo largo del programa mientras esta sea accesible. Se pueden declarar varias variables en una sola instrucción y además se pueden asignar directamente sus valores.

Sintaxis:
Dim <identificadorVariable(s)>As<Tipo de Dato>[=<Valor>]

Ejemplos
Dim b As Byte=2 Dim uno, dos As Integer

Si una variable local no ha sido inicializada de forma expresa el compilador de VB.NET asigna, de forma automática, un valor por omisión correspondiente al tipo de la variable; por ejemplo, las variables numéricas son inicializadas a 0. Un caso especial es el tipo String que se inicializa a Nothing no a cadena vacía. Para asignar un nuevo valor a una variable se utilizan operadores de asignación. En el caso de una variable ya declarada se usa el operador de asignación (=), como se ve en el siguiente ejemplo:
Dim empleadoNumero As Integer empleadoNumero = 23;

Identificador
El nombre o identificador de una variable debe cumplir con las siguientes reglas.
y y y

Debe iniciar con carácter alfabético. Debería contener solo caracteres alfabéticos, dígitos y carácter de subrayado El nombre no debe exceder a 255 caracteres, etc.

A la hora de asignar un identificador a una variable se debe tener en cuenta que VB .NET no diferencia entre mayúsculas y minúsculas. Se recomienda evitar poner todas las letras en mayúsculas, empezar con un signo de subrayado y el uso de abreviaturas. Para escribir el nombre de las variables se recomienda utilizar la nomenclatura camelCasing que consiste en poner en mayúscula el primer carácter de todas las palabras excepto la primera. Utilice camelCasing para variables que definan variables, campos y parámetros, como se muestra en el siguiente ejemplo:
int bucleNumMax;

Visual Basic .Net | VARIABLES Y EXPRESIONES

9

Período de duración
El período de duración de un elemento declarado es el tiempo durante el cual está disponible para el uso. Una variable definida tan solo con la palabra clave Dim se elimina de la memoria en el momento en que finaliza la ejecución de la subrutina donde está definida. Si lo que se desea es que conserve su valor entre llamadas se debe utilizar la palabra clave Static

Ejemplo
En el ejemplo siguiente la salida por pantalla será 1 y 2 ya que se mantienen los valores de la variable contador entre las distintas llamadas a la subrutina
Public Static contador contador = Console.WriteLine(contador) End Public Metodo1() Metodo1() End Sub Sub As contador Integer + = Metodo1() 0 1 Sub Sub Metodo2()

Ámbito de una variable
El lugar donde se declaren las variables va a determinar el ámbito en el que son accesibles. Se pueden declarar variables en :
y y y y

Un bloque: Un bloque puede ser, por ejemplo, un If... End If, un Do... Loop o los bloques Get y Set Un procedimiento: Definidos dentro de un Sub, Function o Property. Un módulo: Una clase (Class), un módulo (Module) o estructura (Structure) Un espacio de nombres: Un bloque Namespace.

Las variables abarcan un ámbito delimitado por el bloque en el que están definidas, así una variable definida a nivel de procedimiento, no existirá fuera del mismo. De la misma manera, si definimos una variable en un bloque dentro de un procedimiento, la variable no será accesible más allá de su instrucción de cierre (End, Loop o Next) .

Ejemplo
Las variables a y b no serán accesibles fuera de Main() en el siguiente programa:
Module Suma Sub Main() Dim a As Double Dim b As Double ««. End Sub End Module

Visual Basic .Net | VARIABLES Y EXPRESIONES

10

DECLARACIÓN DE CONSTANTES
Dentro de una aplicación, puede ser adecuado e interesante la declaración y uso de variables constantes cuyo valor asignado, no sea modificable a lo largo de la aplicación y que se utilice para un caso o ejecución determinada.

Sintasix
Const <identificadorVariable(s)>As<Tipo de Dato>=<Valor>

Ejemplo
El típico valor constante de ejemplo en toda demostración del uso y declaración de variables constantes es el valor PI.
Module PruebaConstanste Sub Main() Const PI As Doubl e = 3.1416 Dim dValor As Decimal dValor = (2 * PI) ^ 2 ««. End Sub End Module

TIPO DE DATOS
Todas las variables que se utilicen deben pertenecer a un tipo de datos. Cada tipo de datos tiene un nombre, pertenece a una clase, ocupa un espacio en la memoria y permite un rango de valores. A continuación se muestran los tipos de datos básicos de .NET Tipo Boolean Byte Char Date Clase System.Boolean System.Byte System.Char System.Datetime Tamaño 4 bytes 1 Byte 2 Bytes 8 Bytes Rango de valores Trae o False 0 a 255 (sin signo) 0 a 65535 (sin signo) 0:00:00 (medianoche) del 1 de enero de 0001 a 11:59:59 p.m. del 31 de diciembre de 9999. +/79,228,162,514264,337,593,543,950,33 5 sin punto decimal; numero mas corto (no 0) es: +/0.0000000000000000000000000001 -1.79769313486231E308 hasta 4.94065645841247E -324 para valores 11

Decimal System.Decimal

12 bytes

Double

System.Double

8 bytes

Visual Basic .Net | VARIABLES Y EXPRESIONES

negativos; 4.94065645841247E -324 hasta 1.79769313486232E308 para valores positivos Integer Long Object Short Single System.Int32 System.Int64 System.Object System.Int16 System.Single 4 bytes 8 bytes 4 bytes 2 bytes 4 bytes -2,147,483,684 to 2,147,483,647 -9,223,372,036,854,775,808 9,223,372,036,854,775,807 Cualquier tipo de dato -32,768 a 32,767 -3.402823E38 hasta -1.4401298E-45 para valores negativos; 1.4401298 hasta 3.402823E38 para valores positivos. hasta

String

System.String

En función 0 hasta aproximadamente 2 billones de de la caracteres Unicode plataforma de implementaci ón 4 bytes 8 bytes 2 bytes 0 a 4.294.967.295 (sin signo) 0 a 18.446.744.073.709.551.615 (1,8...E+19 ‚) (sin signo) 0 a 65.535 (sin signo)

UIntege r ULong UShort

System.UInt32 System.UInt64 System.UInt16

EXPRESIONES y OPERADORES
Las expresiones están formadas por operandos y operadores. Algunos ejemplos de operadores son el operador de concatenación y suma (+) y el operador de división (/). Literales, campos, variables locales y expresiones son ejemplos de operandos.

Operadores matemáticos
Los operadores matemáticos permiten realizar operaciones con valores numéricos Operador
+ * / \ Mod ^

Descripción Suma Resta Multiplicación División División entera (parte entera de la división) Residuo (resto de la división entera) Exponenciación (elevar a una potencia)

Visual Basic .Net | VARIABLES Y EXPRESIONES

12

Ejemplo
Dim nInc As Integer For nInc = 1 To 10 If nInc Mod 2 = 0 Then txtOutput.Text += nInc & " es par " & vbNewLine Else txtOutput.Text += nInc & " no es par " & vbNewLine End If Next txtOutput.Text += "10/0 = " & C Str(10 / 0)

La división entre 0 no está permitida en los cálculos matemáticos ya que produce un resultado infinito, en Visual Basic .NET se maneja esta situación automáticamente y muestra un valor de Infinito.

Operadores lógicos
Los operadores lógicos permiten crear expresiones con valores lógicos (true y false). Operadores Lógicos And Or Not Xor AndAlso OrElse Descripción Las 2 expresiones deben ser verdaderas Alguna de las 2 expresiones es verdadera Negación del resultado de la expresión Si 1 y sólo 1 de las expresiones es verdadera Si la primer y segunda condición son verdaderas Si la primer o segunda condición es verdadera

Los nuevos operadores lógicos AndAlso y OrElse reciben el nombre de sistema de cortocircuito. Se dice que una operación lógica se encuentra cortocircuitada si el código compilado puede omitir la evaluación de una expresión en función del resultado de otra. Si el resultado de la primera expresión evaluada determina el resultado final de la operación, no es necesario evaluar la segunda expresión, ya que no cambiará el resultado final. La evaluación cortocircuitada puede mejorar el rendimiento si la expresión omitida es compleja o si implica llamadas de procedimiento.

Ejemplo
En el siguiente código si nCalificacion <= 0 es False ya no se evalúa la siguiente expresión lógica pues la condición va a ser False en todos los casos.
Dim nCalificacion As Integer = 0 If nCalificacion <= 0 AndAlso nCalificacion / 0 Then MsgBox("Error de lógica") Else MsgBox("Continuar cálculo") End If

Visual Basic .Net | VARIABLES Y EXPRESIONES

13

Operadores de asginación abreviados
Visual Basic .NET incorpora nuevos operadores abreviados que facilitan la escritura de código, por ejemplo:
x = x + 1 'Antes escribía x += 1 'Ahora puede escribir

Operadores Abreviados
+= -= *= /= \= ^ &=

PRECEDENCIA DE OPERADORES
Si una expresión contiene varios operadores, la precedencia de estos controla el orden en que se evalúa cada uno de ellos. Por ejemplo, la expresión x + y * z se evalúa como x + (y * z) porque el operador de multiplicación tiene una precedencia mayor que el de suma. + Operadores
() */% +< <= > >= == != -=

Asociatividad
Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Izquierda a derecha Derecha a izquierda

Tipo
Paréntesis Multiplicativos Adición Relacionales Igualdad Asignación

ASOCIATIVIDAD
La asociatividad de los operadores indica el orden en que se ejecutan cuando tienen la misma precedencia. Obviamente, esto es aplicable solamente a los operadores binarios. Todos los operadores binarios son asociativos por la izquierda salvo los de asignación, que son asociativos por la derecha.

Ejemplos
4+3+2

Primero se hace 4+3 y a este resultado se le suma 2 (+ es asociativo por la izquierda).
b=c=d

Primero se asigna a c el valor de d, y después se asigna a b el valor de c (= es asociativo por la derecha)

Visual Basic .Net | VARIABLES Y EXPRESIONES

14

Es posible controlar la precedencia y la asociatividad utilizando paréntesis.

Ejemplos
x+y*z //Se multiplica primero y por z y luego suma el resultado a x,

Si embargo:
(x + y) * z //Suma primero x más y, y luego multiplica el resultado por z.

PRÁCTICAS
1. Escribir un programa que visualice por el monitor dos mensajes que se introducen por teclado (Para realizar esta práctica debe consultar la forma de introducir un mensaje por teclado) 2. Escribir un programa que lea 2 números enteros y calcule la media de los mismos. El resultado debe mostrarse por pantalla 3. Escribir un programa que realice la siguiente operación y la muestre por pantalla

Las variables deben ser inicializadas en el momento de la declaración.

Visual Basic .Net | VARIABLES Y EXPRESIONES

15

4.

ESTRUCTURAS DE CONTROL

INTRODUCCIÓN
Habitualmente, en la secuencia de ejecución de un programa, surge la necesidad de repetir la ejecución de determinadas instrucciones o condicionar la ejecución de algunas de ellas. Para dirigir la secuencia de ejecución para que el programa consiga sus objetivos se utilizan las sentencias de control. Las sentencias de control se pueden agrupar en las siguientes categorías.
y

Sentencias condicionales. Las instrucciones IF y Select Case se conocen como instrucciones condicionales. Estas instrucciones ejecutan unas u otras instrucciones en función del valor de expresiones. Sentencias iterativas. Las instrucciones While... End While y Do«Loop incluyen bloques de instrucciones que se ejecutan de forma reiterada mientras se cumple una condición. También se conocen como bucles. Sentencias de salto. Las instrucciones goto y continue se usan para transferir el control incondicionalmente a otra instrucción. No se recomienda su uso indiscriminado ya que rompe las reglas de la programación estructurada. Sentencias de control de excepciones. Las instrucciones Try«Catch permiten capturar los errores de ejecución con excepciones que permiten controlar el programa cuando el error se produce.

y

y

y

IF«THEN«ELSE
La construcción If«Then«Else, nos permite ejecutar una o más condiciones que podemos comparar utilizando operadores relacionales y operadores lógicos.

Sintasix
IF expresión-booleana Then bloque1 Else bloque2 End IF

La instrucción IF evalúa una expresión booleana. Si el resultado de la expresión booleana es True, el control pasa al primer bloque; si es False y existe una cláusula Else, el control se transfiere al segundo bloque.

Ejemplo
Se puede utilizar una instrucción IF sencilla, como la siguiente:
IF numero Mod 2 = 0 Then Console.WriteLine("par") End IF

O una sentencia IF con Else
Dim intValor As Integer = 5

Visual Basic .Net | ESTRUCTURAS DE CONTROL

16

If intValor > 5 Then System.Console.WriteLine ("Valor mayor que 5") Else System.Console.WriteLine ("Valor menor que 6") End If

IF en cascada
La instancia ElseIf permite tener un número arbitrario de ramas. No obstante, las instrucciones controladas por una instrucción ElseIf son mutuamente excluyentes, lo que significa que sólo se ejecuta una instrucción de entre todas las instancias ElseIf. Sintasix
IF expresión-booleana1 Then bloque1 ElseIf expresión-booleana2 Then bloque2 Else bloque3 End If

Ejemplo
Dim intValor As Integer = 5 If intValor > 5 Then Console.WriteLine ("Valor mayor qu e 5") ElseIf intValor < 5 Then Console.WriteLine ("Valor menor que 5") Else Console.WriteLine ("Valor igual a 5") End If

Select Case...End Select
Se trata de una evolución en la estructura If...End If de decisión múltiple, y su trabajo consiste en evaluar una expresión y comparar el resultado con la lista de expresiones de cada uno de los casos proporcionados.

Sintaxis
Select Case Expresión Case ListaExpresionesA código si se cumple ListaExpresionesA [Case ListaExpresionesB] código si se cumple ListaExpresionesB [Case Else] código si no se cumple ninguna ListaExpresiones End Select

La lista de expresiones asociada a cada Case en esta estructura estará separada por comas y podrá tener alguno de los siguientes formatos:
y y

Expresión. ExpresiónMenor To ExpresiónMayor Visual Basic .Net | ESTRUCTURAS DE CONTROL 17

y

Is OperadorComparación Expresión

Tras evaluar la expresión de la estructura, si se encuentra una coincidencia con alguno de los Case, se ejecuta el bloque de código situado entre dicho Case y el siguiente. En caso de que no haya ninguna coincidencia, podemos opcionalmente, ejecutar un bloque por defecto, utilizando la palabra clave Case Else. Finalizada esta estructura, la ejecución continuará a partir de la línea situada después de End Select.

Ejemplo
Sub Main() Dim Valor As Integer Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Select Case Valor Case 5 Console.WriteLine("El valor es 5") Case 120, 250 Console.WriteLine("El valor es 120 ó 250") Case 3000 To 4000 Console.WriteLine("El valor está en el rango de 3000 a 4000") Case Is < 10 Console.WriteLine("El valor es menor de 10") Case Else Console.WriteLine("El valor es {0}, y no se cumple ningún caso", Valor) End Select Console.ReadLine() End Sub

En el caso de que tras evaluar la expresión, haya más de un Case cuya lista de expresiones se cumpla, se ejecutará el que esté situado en primer lugar. En el ejemplo anterior, cuando la variable Valor contiene 5, se cumplen dos casos.

While... End While
La instrucción While«End While es la más sencilla de todas las sentencias iterativas. Ejecuta repetidamente el bloque de instrucciones que contiene mientras se cumpla una expresión booleana.

Sintaxis
While Expresión bloque de instrucciones End While

Ejemplo
Sub Main() Dim Valor As Integer Dim Contador As Integer Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Console.WriteLine("Mostrar en consola todos los númer os desde 1 hasta el _ introducido") While Contador < Valor Console.Write("-" & Contador)

Visual Basic .Net | ESTRUCTURAS DE CONTROL

18

Contador += 1 End While Console.ReadLine() End Sub

Do...Loop
Esta estructura ejecuta un conjunto de líneas de código en función del valor de una expresión condicional. La condición puede estar situada al comienzo o final de la estructura.

Sintaxis
Condición al principio.
Do While | Until Expresión bloque de instrucciones Loop

La diferencia entre usar While o Until reside en que empleando While, el código del bucle se ejecutará mientras la expresión devuelva Verdadero. En el caso de Until, el código se ejecutará mientras que la expresión devuelva Falso.

Ejemplo
Sub Main() Dim Valor As Integer Dim Palabra As String Dim Contador As Integer Dim Pruebas As Integer ' bucle con While Do While Valor <> 200 Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Loop ' bucle con Until Do Until Palabra = "coche" Console.WriteLine("Introducir una palabra") Palabra = Console.ReadLine() Loop End Sub

Sintaxis
Condición al final. La diferencia en este caso, consiste en que el contenido de la estructura se ejecuta al menos una vez.
Do bloque de instrucciones Loop While | Until Expresión

Ejemplo
Sub Main()

Visual Basic .Net | ESTRUCTURAS DE CONTROL

19

Dim Valor As Integer Dim Palabra As String ' bucle con While Do Console.WriteLine("Introducir un número") Valor = Console.ReadLine() Loop While Valor <> 200 ' bucle con Until Do Console.WriteLine("Introducir una palabra") Palabra = Console.ReadLine() Loop Until Palabra = "coche" End Sub

For...Next
Esta estructura ejecuta un bloque de código un número determinado de veces, establecido por un rango de valores y controlado por un contador.

Sintaxis
For Contador = Inicio To Fin [ Step Incremento] bloque de instrucciones Next

El elemento Contador se inicializa con un valor y el código existente entre For y Next es ejecutado una serie de veces, hasta que el valor de Contador se iguala a Fin. Por defecto, los incrementos de Contador son en uno, pero podemos cambiar este aspecto utilizando el modificador Step, mediante el que podemos establecer el número en el que se van a realizar los incrementos. Step también nos permite realizar decremento utilizando un número negativo.

Ejemplo
Sub Main() Dim Contador As Integer Dim Final As Integer ' recorrido simple del bucle Console.WriteLine("Bucle For normal") For Contador = 1 To 10 Console.WriteLine("Variable Contador: {0}", Contador) Next Console.WriteLine() ' recorrer el bucle espe cificando un incremento Console.WriteLine("Bucle For con incremento") Console.WriteLine("Introducir el número de ejecuciones para el bucle") Final = Console.ReadLine() For Contador = 1 To Final Step 4 Console.WriteLine("Variable Contador: {0}", Conta dor) Next

Visual Basic .Net | ESTRUCTURAS DE CONTROL

20

Console.WriteLine() ' recorrer el bucle especificando un decremento Console.WriteLine("Bucle For con decremento") For Contador = 18 To 4 Step -1 Console.WriteLine("Variable Contador: {0}", Contador) Next Console.WriteLine() ' este bucle no se ejecutará, al ser mayor el valor de contador ' que el valor final, y no haber establecido un decremento For Contador = 18 To 4 Console.WriteLine("Variable Contador: {0}", Contador) Next End Sub

Se puede optimizar la ejecución en un bucle de este tipo, utilizando como contador una variable de tipo Integer, en vez de una de tipo Short, Long, Decimal, etc. Esto es debido a que los tipos Integer se actualizan más rápidamente que los otros tipos numéricos.

For Each...Next
La instrucción For Each repite un grupo de sentencias para cada elemento de un array o de una colección. Esta sentencia será estudiada con detalle en el capítulo dedicado a Arrays.

Sintasix
For Each Elemento In ColecArray bloque de instrucciones Next

Ejemplo
Sub Main() ' crear un array y rellenarlo con valores Dim lsColores() As String = {"Azul", "Verde", "Marino", "Violeta"} Dim lsColor As String ' en cada iteración se obtiene un elemento ' del array lsColores, y se guarda en la variable lsColor For Each lsColor In lsColores Console.WriteLine(lsColor) Next End Sub

Continue
La sentencia Continue oblige a ejecutar la siguiente iteración del bucle While, Do o For en el que está contenida. No se recomienda utilizar esta instrucción pues rompe las reglas de la programación estructurada. Visual Basic .Net | ESTRUCTURAS DE CONTROL 21

Sintasix
Continue {While | Do | For}

GoTo
La sentencia GoTo transfiere el control a una línea específica del programa, identificada por una etiqueta.

Sintasix
Goto etiqueta . . etiqueta: bloque de instrucciones

TRY«CATCH
Dentro del esquema de gestión de errores del entorno .NET Framework, encontramos las figuras del error y la excepción. Estos elementos son utilizados indistintamente en muchas ocasiones para hacer referencia genérica a los errores producidos; sin embargo, aunque complementarios, cada uno tiene su propia funcionalidad dentro del proceso de tratamiento de un error.
y

y

Error. Un error es un evento que se produce durante el funcionamiento de un programa, provocando una interrupción en su flujo de ejecución. Al producirse esta situación, el error genera un objeto excepción. Excepción. Una excepción es un objeto generado por un error, que contiene información sobre las características del error que se ha producido. la gestión de se lanza una gestionar las ejecución de

Visual Basic .NET es un lenguaje orientado a objetos y por lo tanto, errores se realiza mediante excepciones. Cuando se produce un error excepción. Si utilizamos las instrucciones de código necesarias para excepciones, tendremos un control claro en todo momento, sobre la nuestras aplicaciones.

Las instrucciones para usar excepciones tienen una estructura como la que se detalla a continuación:
Try bloque de instrucciones donde se detecta la excepción Catch <tipo_excepción> bloque de instrucciones en el caso de que suceda una excepción [Finally bloque de instrucciones que se ejecutan en cualquier caso] End Try

Ejemplo
Public Sub Main() Dim sValor As String

Visual Basic .Net | ESTRUCTURAS DE CONTROL

22

Dim iNumero As Integer Try ' comienza el control de errores Console.WriteLine("Introducir un númer o") sValor = Console.ReadLine() ' si no hemos introducido un número... iNumero = sValor ' ...aquí se producirá un error... ' ...y no llegaremos a esta parte del código iNumero = iNumero + 1000 Catch ' si se produce un error, se genera una excepci ón ' que capturamos en este bloque de código ' manipulador de excepción, definido por Catch Console.WriteLine("Error al introducir el número" & _ ControlChars.CrLf &"El valor {0} es incorrecto", sValor) µControlChars.CrLf -> provoca un salto de línea End Try ' resto del código del procedimiento ' .... Console.ReadLine() End Sub

PRÁCTICAS
1) Escribir dos versiones (una usando for y otra usando while) de un programa que imprima una escala de temperatura de -30ºC a +45ªC, en la que varíen de 5 en 5 ºC. 2) Escribir un programa que imprima las tablas de multiplicar del número 1 al 10. Cada tabla debe ir separada por una línea en blanco. 3) Escribir un programa que genere, de modo aleatorio, 10 números entre 1 y 100. Nota: Randomize([Número]). Inicializa el generador de números aleatorios, que utilizaremos posteriormente en la función Rnd( ). Opcionalmente recibe un número como parámetro que sirve al generador como valor inicial o semilla para la creación de estos números. Rnd([Número]). Devuelve un número aleatorio de tipo Single, que será menor que 1, pero mayor o igual a cero. Podemos, opcionalmente, variar el modo de generación del número pasando un valor al parámetro de esta función. En función de si el parámetro es mayor, menor de cero, o cero, el comportamiento de Rnd( ) a la hora de generar el número será diferente. Dim Contador As Integer Dim Aleatorio As Single Randomize() For Contador = 1 To 10 Aleatorio = Rnd() Console.WriteLine("Número generado: {0}", Aleatorio) Visual Basic .Net | ESTRUCTURAS DE CONTROL 23

Next Console.ReadLine() El anterior código produce la siguiente salida

Si necesitamos que el número aleatorio esté comprendido en un intervalo de números enteros, utilizaremos esta fórmula Int((LímiteSuperior - LímiteInferior + 1) * Rnd() + LímiteInferior) El ejemplo siguiente se crean números aleatorios comprendidos entre el intervalo de los números 7 y 12. Dim Contador As Integer Dim Aleatorio As Single Randomize() For Contador = 1 To 10 Aleatorio = Int((12 - 7 + 1) * Rnd() + 7) Console.WriteLine("Número generado: {0}", Aleatorio) Next Console.ReadLine() 4) Escribir un programa genere números aleatorios (entre 1 y 100) y verifique si son pares o impares, mostrando el resultado en la pantalla. Nota: Recordar que el operador Mod nos muestra el resto de dos números enteros 5) Escribir un programa que genere aleatoriamente un número como nota de un alumno, y muestre su calificación según la siguiente tabla: (fijar un rango entre 0 y 150) De 0 a 50 puntos -> Suspenso De 51 a 75 puntos -> Recuperar De 76 a 90 puntos -> Aprobado De 91 a 100 puntos -> Aprobado con mérito Menor que 0 o mayor que 100 -> puntuación inválida. Visual Basic .Net | ESTRUCTURAS DE CONTROL 24

6) Conversión de un día del año en un par de mes y día . En este ejercicio se implementará un programa que lea de la consola un número entero de d (entre 1 y ía 365) y lo almacene en una variable entera. El programa convertirá este número en un mes y un día del mes e imprimirá el resultado en la consola. Por ejemplo, el resultado de introducir 40 debe ser ³Febrero 9´. (En este ejercicio se ignora el efecto de los años bisiestos.) Realizar una mejora al programa permitiendo realizar la operación múltiples veces hasta que se introduce el 0. Realizar una mejora creando una excepción propia que lance un error en el caso de que el día no esté en el rango correcto (1:365). 7) Escribir un programa que detecte e imprima en la pantalla números múltiplos de 3. Esos números deben variar de 1 a 100. Controlar que el número esté en el rango establecido. Los números se deben introducir por teclado. Modificación: Después de escribir el programa crear una excepción y lanzarla si el número no está en el rango establecido. 8) Crear un programa que reproduzca el juego de ³Adivina mi número´. 1. El ordenador deberá generar un número aleatorio entre 0 y 100. 2. A continuación nos pide que adivinemos su número, para lo que tendremos que teclear uno. 3. Aparecerá un mensaje en pantalla diciéndonos si nuestro número es mayor o menor o felicitándonos si hemos acertado. 4. Si hemos fallado, nos volverá a pedir otro hasta que lo acertemos. 5. Cuando acertemos, también nos dirá cuántos intentos hemos realizado. 9) Escriba un programa que nos calcule el cambio que debe dar la caja de un supermercado: Dado un precio y una cantidad de dinero, el programa nos dirá cuántas monedas deben darse como cambio de tal forma que el número total de monedas sea mínimo. 10) Modificar el ejemplo anterior y, utilizando control de excepciones correspondiente controlar el error de introducir un String en la entrada.

Visual Basic .Net | ESTRUCTURAS DE CONTROL

25

5.

PROCEDIMIENTOS Y PARÁMETROS

INTRODUCCIÓN
Una aplicación implementada en Visual Basic .NET está estructurada en clases o módulos que contienen bloques de código con nombre llamados métodos . Un método es un miembro de una clase que lleva a cabo una acción y que se compone de una serie de instrucciones C# que han sido agrupadas bajo un nombre determinado. La mayor parte de los lenguajes de programación modernos incluyen un concepto similar; se puede considerar que un método es equivalente a una función, una subrutina, un procedimiento o un subprograma. En este capítulo se tratarán los métodos estáticos ya que aún no hemos estudiado el concepto de encapsulación. Ejemplo de métodos
using System; class EjemploClase { static void EjemploMetodo { Console.WriteLine (³Método de Ej emplo´); } static void Main() { //«.. } }

El código mostrado en el ejemplo contiene tres métodos:
y y y

El método Main El método WriteLine El método EjemploMetodo

El método Main es el punto de entrada de la aplicación, mientras que WriteLine forma parte de Microsoft® .NET Framework y se puede llamar desde un programa. El método WriteLine es un método estático de la clase System.Console. El método EjemploMetodo pertenece a EjemploClase y contiene una llamada al método WriteLine.

CREACIÓN DE MÉTODOS
Cuando se crea un método hay que especificar lo siguiente:
y

Nombre. Un método no puede tener el mismo nombre que una variable, una constante o cualquier otro elemento que no sea un código y haya sido declarado en la clase. El nombre del método puede ser cualquier identificador permitido de C# y distingue entre mayúsculas y minúsculas.

Visual Basic .Net | PROCEDIMIENTOS Y PARÁMETROS

26

y

Lista de parámetros. continuación del nombre del método viene una lista de parámetros para el método. Esta lista aparece entre paréntesis que deben estar presentes aunque no hay ningún parámetro. Cuerpo del método. Después de los paréntesis viene el cuerpo del método, que debe estar entre llaves ({ y }) aunque no contenga más que una instrucción. Valor de retorno. Los métodos pueden devolver un valor al finalizar su ejecución, este valor será de un tipo determinado. En el caso de que no devuelva ningún valor se utilizará la palabra reservada void y no se necesita utilizar return.

y

y

Todos los métodos en C# pertenecen a una clase, al contrario de lo que ocurre en otros lenguajes de programación como C, C++ y Microsoft Visual Basic®, que permiten subrutinas y funciones globales.

Sintaxis
Para crear un método se utiliza la siguiente sintaxis:
static <tipo de retorno> NombreMetodo (<lista de parámetros> ) { cuerpo del método return <valor> //debe ser del tipo de retorno }

El siguiente ejemplo muestra cómo crear un método llamado EjemploMetodo en la clase EjemploClase:
class EjemploClase { static void EjemploMetodo { Console.WriteLine (³Método de Ejemplo´); } static void Main() { Console.WriteLine("Método Principal"); } }

LLAMADA A MÉTODOS
Después de definir un método, es posible hacer llamadas a ese método desde dentro de la misma clase y desde otras clases. Para hacer una llamada a un método hay que emplear el nombre del método seguido de una lista de parámetros entre paréntesis. Los paréntesis son obligatorios aunque el método llamado no contenga ningún parámetro, como se ve en el siguiente ejemplo.
EjemploMetodo ( );

El programa del siguiente ejemplo comienza al principio del método Main de EjemploClase. La primera instrucción muestra ³Comienza el programa.´ La segunda instrucción en Main es la llamada a EjemploMetodo. El flujo de control pasa a la Visual Basic .Net | PROCEDIMIENTOS Y PARÁMETROS 27

primera instrucción en EjemploMetodo y aparece ³Hola, mundo´. Al final del método, el control pasa a la instrucción inmediatamente después de la llamada al método, que es la instrucción que muestra ³Termina el programa.´
class EjemploClase { static void EjemploMetodo ( ) { Console.WriteLine("Hola, mun do"); } static void Main( ) { Console.WriteLine("Comienza el programa."); EjemploMetodo ( ); Console.WriteLine("Termina el programa."); } }

Visual Basic .Net | PROCEDIMIENTOS Y PARÁMETROS

28

6.

ARRAYS

Un array es un conjunto de variables que tienen el mismo nombre pero diferentes índice que permite simplificar el uso de estas y aumentar la velocidad de acceso a los datos que almacena el array. El array puede tener uno o más dimensiones (hasta 60) y cada dimensión tiene un limite inferior que siempre es 0 y un límite superior que es equivalente al tamaño de la dimensión del array menos 1. Esta característica es distinta que en la versión anterior, en donde el límite inferior del array podría empezar en cualquier numero. La clase base .NET de donde se heredan los Array y pertenece al siguiente NameSpace: System.array.

Declaración de Arrays
A diferencia de Visual Basic 6, en VB.Net se puede declarar e inicializar un array que no tiene tamaño definido. Otra diferencia es que no exista la sentencia Option base que haga que el limite inferior del array empiece en 0 o 1, este siempre empezara en 0 e ira hasta n-1. Sintaxis:
<Tipo de declaración><Array>([Tamaño])As<Tipo de Dato>[=<Valores>]

Ejemplo:
Dim Alumnos(30), Cursos(10) as String Dim Edades() as byte={18,20,25,27} Dim Sueldos( , )As decimal

Redimensionando Arrays
Una vez definido la dimensión de un array, este puede modificarse usando las sentencias ReDim, siempre y cuando el array haya sido declarado como dinámico (con Dim). Sintaxis:
Redim [Preserve]<Array>([Tamaño])As<tipo de Dato> [<=valores>]

Ejemplo:
Dim I, Arreglo() As Integer Redim Arreglo(5) For I=0 to Ubound(Arreglo) Arreglo(I)=I Next I

PROCEDIMIENTOS
Un procedimiento es un bloque de código o conjunto de instrucciones que es definido en la aplicación y que puede ser usado varias veces mediante una llamada. Dos características nuevas de los procedimientos, incorporadas en esta versión son: Visual Basic .Net | ARRAYS 29

y y

Recursividad: Es la capacidad del procedimiento para llamarse a si m ismo. Sobrecarga: Consiste en que varios procedimientos pueden tener el mismo nombre. Subrutinas: Ejecutan una acción sin retornar un valor. Funciones: Ejecutan una acción retornando un valor. De Eventos: Se desencadenan con la interacción del usuario a algún evento. De Propiedades: Devuelven y asignan valores a propiedades de un objeto.

En Visual Basic tenemos varios tipos de procedimientos:
y y y y

Declaración de un Procedimiento:
Subrutina:
[Public|Private|Friend] Sub <Nombre>([Optional][By Val|By Ref] <Par> As <Tipo> ) <Sentencia> [Exit Sub]

Function:
[Public|Private|friend] Function <Nombre>(<parámetros>) As <Tipo> <Sentencia> [Exit Function] [<Nombre>=<Valor>|return(Valor)] End Function

Notas:
y y y

El tipo de argumento por defecto es By Val (En la versión anterior era ByRef) Si se usa Optional debe inicializarse con un valor (antes no era obligatorio) Se puede usar return para regresar a la llamada del procedimiento.

LLAMADA A UN PROCEDIMIENTO:
Antes existía una forma de llamar a una subrutina y dos formas de llamar funciones (o como subrutina o como función, esta ultima mediante paréntesis). En cambio ahora, existe una sola forma de llamar procedimientos, sea subrutinas o funciones, que escribiendo el nombre seguido de paréntesis y entre estos los parámetros (si los hay). Sintaxis:
[Variable=]<Nombre de la Sub o Function>([Parámetro(s)])

Visual Basic .Net | ARRAYS

30

7. STRING Y CONVERSIÓN DE TIPOS
INTRODUCCIÓN
En .NET se utiliza el tipo String para procesar cadenas de caracteres Unicode. El nombre del tipo String es una abreviatura de la clase System.String. El compilador procesa esta forma abreviada, por lo que String y System.String se pueden usar indistintamente. La clase String representa una cadena inmutable de caracteres. Una instancia de String es inmutable, lo que significa que el texto de una cadena no se puede modificar una vez creado. A primera vista podría parecer que algunos métodos modifican un valor String, pero en realidad devuelven una nueva instancia de String que contiene la modificación. La clase String representa una cadena inmutable de caracteres. Internamente, un String, al ser una lista de caracteres, se puede equiparar con un array de Char, sin embargo, dada su propia necesidad funcional, se han agregado diversos atributos y métodos a la clase String, para simplificar y potenciar su utilización, hasta cierto punto ocultando su real implementación de array interna.

DECLARACIÓN DE UN STRING
Declaración de un string como un tipo
Dim <identificador> As String Dim <identificador> As String = ³valor inicial´

Algunos ejemplos:
Dim nombre As String Dim nombre As String = ³Ana Gutiérrez´

Declaración de un string como un objeto
Dim <identificador> As New String () Dim <identificador> As String= New String ()

El constructor está sobrecargado y permite la creación de una instancia con una cadena o la ausencia de la misma. Algunos ejemplos:
Dim miAmiga As New String("Elena") µCon un valor inicial Dim miAmigaNo As New String() µSin valor inicial Dim miAmiga As String= New String("Elena") µdeclarar e instaciar

Un String se puede considerar es un array de caracteres y permite construir instancias de tipo String como en el siguiente ejemplo.

Ejemplo
Sub Main() Dim transporte As String = New String(New Char() {"t", "r", "e", "n"}) Console.WriteLine(" transporte --> {0}", transporte) Console.ReadLine() End Sub

Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS

31

Acceso a un elemento de un String
Para extraer un solo carácter en una posición determinada de una cadena de caracteres utilizando el nombre de la cadena seguido del índice entre corchetes (( índice )). Este proceso es similar al empleado para tablas. El índice del primer carácter de una cadena es cero. El siguiente código muestra un ejemplo:
Dim s As String= "Alfabeto" dim primerCaracter As Char primerCaracter=s(0) µSe mostrará por pantalla A

Los elementos del string son de sólo lectura. Si se intenta asignar un carácter a una cadena de esta forma, se producirá un error en tiempo de compilación.
s(2) = '*' // Error

MÉTODOS y PROPIEDADES
Los tipos String son objetos y por lo tanto se pueden utilizar los métodos y propiedades que le corresponden. Propiedades
y

Length. Devuelve un entero que representa la longitud de la cadena

Dim miCadena As String Dim miLongitud As Integer miCadena = "lola" miLongitud = miCadena.Length ' 4

Métodos estáticos
y

Copy. Copia una cadena para crear otra nueva:

Dim cadena1 As String Dim cadena2 As String cadena1 = "uno" cadena2 = String.Copy("OTRO") Console.WriteLine( "Cadena1 --> {0}", cadena1) Console.WriteLine( "Cadena2 --> {0}", cadena2)

Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS

32

y

Concat. Crea una nueva cadena de caracteres a partir de una o más cadenas o de objetos representados como cadenas.
Dim s3 As String= String.Concat("a", "b", "c", "d", "e", "f", "g")

El operador + está sobrecargado para cadenas, por lo que el ejemplo anterior se podría reescribir de la siguiente manera:
Dim s3 As String = "a" + "b" + "c" + "d" + "e" + "f" + "g";

y

Compare. Compara dos cadenas desde el punto de vista léxico; es decir, compara las cadenas según su ordenación. Compare puede devolver los siguientes valores: o Un entero negativo si la primera cadena es anterior a la segunda o 0 si las cadenas son iguales o Un entero positivo si la primera cadena es posterior a la segunda
Dim cadena1 As String Dim cadena2 As String Dim cadenaResultado As Integer Console.WriteLine( "Introducir primera cadena a comparar" ) cadena1 = Console.ReadLine() Console.WriteLine( "Introducir segunda cadena a comparar" ) cadena2 = Console.ReadLine() cadenaResultado = String.Compare(cadena1, cadena2) Select Case cadenaResultado Case Is < 0 Console.WriteLine( "Primera cadena es menor" ) Case 0 Console.WriteLine( "Las cadenas son iguales" ) Case Is > 0 Console.WriteLine( "Primera cadena es mayor" ) End Select Console.ReadLine()

Por definición, cualquier cadena (incluyendo una cadena vacía) es siempre mayor que una referencia Nothing, y dos referencias Nothing se consideran iguales al compararlas. Compare es un método sobrecargado. Existe una versión con tres parámetros, el tercero de los cuales es un valor Bool si en la comparación se deben ignorar las mayúsculas. El siguiente ejemplo muestra una comparación que no distingue mayúsculas y minúsculas:
s1 = "repollo" s2 = "Repollo" comp = String.Compare(s1, s2, true)

µIgnorar mayúsculas

Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS

33

Métodos no estáticos
y

Insert. Acepta como parámetro una posición y una cadena y devuelve un string en en que se ha insertado, a partir de la posición indicada, la cadena que se pasó como parámetro.
Dim cadena1 As String Dim cadenaInsert As String cadena1 = "Estamos programando" cadenaInsert = cadena1.Insert(2, "MEDIO") ' "EsMEDIOtamos programando"

y

IndexOf. Indica cuál es el índice de la primera aparición de la subcadena que se pasa por parámetro dentro de la cadena sobre la que se aplica. La búsqueda de dicha subcadena se realiza desde el principio de la cadena, pero es posible indicar en un segundo parámetro opcional de tipo Integer el cual es el índice de la misma a partir del que se desea empezar a buscar. Del mismo modo, la búsqueda acaba al llegar al final de la cadena sobre la que se busca, pero pasando un tercer parámetro opcional de tipo Integer es posible indicar donde terminarla. Si no encuentra la cadena devuelve un ±1.
Dim s As String= "hola" int i=s.IndexOf("h") Console.WriteLine(i) µ Muestra 0

y

LastIndexOf. Igual que IndexOf, pero comenzando desde el final del String. EndsWith. Devuelve true si el final de la instancia de String coincide con un Substring dado y False en caso contrario.
Dim s As String=´hola que tal´ If (s.EndsWith(³tal´)) Then Console.WriteLine(³Está en la cadena´)

y

y

StartsWith. Devuelve True si el principio de la instancia de String coincide con un Substring dado y False en caso contario.
Dim s As String=´hola que tal´ If (s. StarsWith (³tal´)) Then Console.WriteLine(³Está en la cadena´)

y

String Substring (int posición, int número) : Devuelve la subcadena de la cadena sobre la que se aplica que comienza en la posición indicada y tiene el número de caracteres especificados. Si no se indica dicho número se devuelve la subcadena que va desde la posición indicada hasta el final de la cadena.
Dim s1 As String Dim s2 As String=´hola que tal´ s1=s2.Substring(9); µs1 contiene ³tal´

y

Trim. Elimina todos los espacios al comienzo y al final del string.
Dim s As String=´ hola ´ s = s.Trim( ) Console.WriteLine(s)

µ"hola"

y

ToUpper y ToLower. Devuelven una cadena con todos los caracteres cambiados a mayúsculas y minúsculas, respectivamente:
Dim sText As String ="El camino al triunfo "

Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS

34

Console.WriteLine(sText.ToUpper( )) Console.WriteLine(sText.ToLower( ))

µ EL CAMINO AL TRIUNFO µel camino al triunfo

y

Equals. Se puede emplear para comparar dos cadenas y ver si son iguales. El método devuelve un valor bool que es true si las cadenas son iguales y false en caso contrario. Es un método sobrecargado y se puede usar como método de instancia o como método estático.
Dim s1 As String= "Bienvenidos" Dim s2 As String= "Bienvenidos" If (s1.Equals(s2)) Then Console.WriteLine("Las cadenas son iguales") If (String.Equals(s1,s2)) Then Console.WriteLine("Las c adenas son iguales")

OPERADORES DE COMPARACIÓN EN STRING
Los operadores = y <> están sobrecargados para la clase String. Estos operadores sirven para examinar los contenidos de cadenas de caracteres.
Dim a As String= "Test"; Dim b As String = "Test"; If (a = b) Then.. µ Devuelve true

Los siguientes operadores y métodos son equivalentes:
y y

El operador = es equivalente al método String.Equals. El operador <> es equivalente al método NOT String.Equals.

Los otros operadores relacionales (<, >, <= y >=) no están sobrecargados para la clase String.

CONVERSIÓN DE TIPOS
CLASE Convert
Los métodos de la clase Convert permiten convertir un tipo base en otro. Los tipos base que se admiten son: Boolean, Char, SByte, Byte, Int16, Int32, Int64, UInt16, UInt32, UInt64, Single, Double, Decimal, DateTime y String.

Ejemplo
Sub Main() Dim miNumero As Double miNumero = 23.15 Try ' Devuelve 23 Dim iNumero As Integer iNumero = System.Convert.ToInt32(miNumero) Catch exp As System.OverflowException System.Console.WriteLine( "Overflow por la conversión a entero." ) End Try ' Devuelve True Dim bNumero As Boolean bNumero = System.Convert.ToBoolean(miNumero)

Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS

35

' Devuelve "23.15" Dim strNumero As String strNumero = System.Convert.ToString(miNumero) Try ' Devuelve '2' Dim chrNumero As Char chrNumero = System.Convert.ToChar(strNumero.Chars(1)) Catch exp As System.ArgumentNullException System.Console.WriteLine( "El String es nulo" ) End Try ' System.Console.ReadLine() devuelve un String que debe ser convertido Dim miEntero As Integer miEntero = 0 Try System.Console.WriteLine( "Enter an integer:" ) miEntero = System.Convert.ToInt32(System.Console.ReadLine()) Catch exp As System.ArgumentNullException System.Console.WriteLine( "String está vacío") Catch exp As System.FormatException System.Console.WriteLine( "String no tiene el formato correcto" ) Catch exp As System.OverflowException System.Console.WriteLine( "El dato no puede almacenarse como entero" ) End Try System.Console.WriteLine( "El entero convertido a Double {0}" , _ System.Convert.ToDouble(miEntero)) End Sub

Entre las excepciones más comunes a la hora de utilizar Convert se encuentran las siguientes: Tipo de excepción Condición
y y y y
Conversiones de Char a Boolean, Single, Double, Decimal o DateTime. Conversiones de Boolean, Single, Double, Decimal o DateTime a Char. Conversiones de DateTime en cualquier otro tipo excepto String. Conversiones de cualquier otro tipo, excepto String en DateTime.

InvalidCastException Cuando no se admite la conversión.

FormatException

Cuando se quiere convertir una cadena que no tiene un formato correcto
y y y y
Una cadena que se va a convertir en un valor Boolean no es Boolean Una cadena que se va a convertir en un valor Char consta de varios caracteres. Una cadena que se va a convertir en un tipo numérico no se reconoce como un número válido. Una cadena que se va a convertir en DateTime no se reconoce como un valor de fecha y hora válido.

OverflowException

Cuando la conversión produce un valor fuera del rango a convertir

Si la conversión de un tipo numérico en otro produce una pérdida de precisión (se pierden los dígitos menos significativos), no se produce una excepción sino un Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS 36

resultado incorrecto. Por ejemplo, si un tipo Double se convierte a Byte se puede producir una pérdida de precisión
Dim valorD As Double = 34.5 'Convierte cadena en Decimal valorD = Convert.ToSByte(valorD) Console.WriteLine(valorD) 'Muestra 34 valorD = 456789 valorD = Convert.ToSByte( valorD) 'Provoca una excepcion

MÉTODO Parse
Todos los tipos base poseen un método estático llamado Parse que convierte una cadena en el tipo de la clase indicada, por ejemplo:
Dim cadena As String = 30 Dim valorD As Decimal Dim valorI As Integer 'Convierte cadena en Decimal valorD = Decimal.Parse(cadena) 'Convierte cadena en Integer valorI = Integer.Parse(cadena)

Las excepciones más habituales que se pueden producir al aplicar el método Parse son: Tipo de excepción ArgumentNullException FormatException OverflowException Condición El valor de la cadena es Nothing La cadena no tiene el formato correcto La cadena está fuera del rango de valores permitidos por el tipo de datos al que se convierte

PRÁCTICAS
1. Implementar un programa que lea un número codificado de tal forma que la A es el 0, la B es el 1«J es el 9. El código contendrá estos caracteres y tendrás que construir el número que se esconde tras él. El número debe ser transformado en Int32. Realiza un control exhaustivo de excepciones. 2. Implementar un método que tome como parámetro un string y lo devuelva invertido 3. Hacer un programa que valide un email, las reglas son las siguientes: a. Eliminar posibles espacios al principio y al final. b. Que todos los caracteres sean válidos (hacer una cadena con todos los caracteres válidos y comprobar que todos los caracteres del email están incluidos dentro de ella). Sólo permite letras, dígitos, y los símbolos _ - @ y el punto. c. Que tenga un símbolo @, ni más ni menos. d. Que tengan al menos un punto a la derecha de @, pero puede ser más de uno e. Que el lado izquierdo sea más largo que 0 Visual Basic .Net | STRING Y CONVERSIÓN DE TIPOS 37

8.

MANEJO DE THREADS

Un Thread es la unidad básica para que el sistema operativo pueda ejecutar un proceso. Una aplicación (AppDomain) siempre inicia un solo thread, pero este a su vez puede iniciar otros threads. Al proceso de ejecutar varios threads, la llamaremos threading. La ventaja principal de los threads es tener varias actividades ocurriendo en forma simultánea, lo cual es una gran posibilidad para que los desarrolladores puedan trabajar con varios procesos sin perjudicar otras tareas. Por ejemplo, el usuario pueda interactuar con la aplicación mientras se va ejecutando una consulta de miles de registros. Se recomienda el uso de Threads en las siguientes situaciones:
y y y

Para comunicaciones sobre una red, servidor Web o Servidor de Base de Datos. Al ejecutar operaciones que demoren bastante tiempo. Para mantener siempre disponible la comunicación entre el usuario y la interfase, mientras se van ejecutando tareas en segundo plano, etc.

El uso de Threads intensivamente disminuye los recursos del sistema operativo, por tanto solo se recomienda usar en los casos ya descritos, sino la performance de la aplicación disminuirá.

Implementación de Threads
Para implementar Threads se usa el NameSpace: ³System.threading.Thread´ y luego se hace uso de los métodos que se definen a continuación:
y

y y y y y y

Star: Inicia un Thread, el cual es un proceso de llamada asíncrona. Para saber el estado del Thread hay que usar las propiedades Threadstate y IsAlive. Abort: Cancela un Thread iniciado, si deseamos saber el estado nuevamente podemos usar las propiedades ThreadState y IsAlive. Sleep: Ocasiona una pausa en milisegundos del bloqueo de instrucciones. Suspend: También ocasiona una pausa en el bloque de instrucciones. Resume: Reinicia una pausa originada con el método Suspend. Interrupt: Interrumpe una pausa originado una excepción. Join: Espera un Thread.

Estado de un Thread
Un Thread puede tener diferentes estados en un mismo tiempo, para saber su estado se encuentra la propiedad ThreadState que devuelve un valor que indica el estado actual Thread. Acción Otro Thread llama a Thread.start El Thread inicia su ejecución Estado de Transición Unchanged Running Visual Basic .Net | MANEJO DE THREADS 38

El Thread llama a Thread.Sleep

WaitSleepJoin

El Thread llama a Monitor. Espera en otro WaitSleepJoin objeto El Thread llama a thread.join en otro waitSleepJoin Thread Otro Thread llama a Thread.Suspend SuspendRequest

El Thread responde a un requerimiento de Suspended Thread.Suspend Otro Thread llama a Thread.resume Otro Thread llama a Thread.Interrupt Otro Thread llama a Thread.Abort El Thread responde a Thread.Abort Running Runnig Abort.Request Aborted

Visual Basic .Net | MANEJO DE THREADS

39

Contenido
1. PROGRAMACIÓN ESTRUCTURADA ................................ .............................. 1 DISEÑO DESCENDENTE (TOP-DOWN)................................ ............................... 2 RECURSOS ABSTRACTOS ................................ ................................ ................... 3 TEOREMA DE LA PROGRAMACIÓN ESTRUCTURADA ................................ ... 3 ETIQUETAS E INSTRUCCIÓN GO-TO ................................ ............................. 4 VENTAJAS DE LA PROGRAMACIÓN ESTRUCTURADA ................................ .. 4 PROGRAMACION MODULAR ................................ ................................ .............. 4 2. APLICACIONES DE CONSOLA EN .NET ................................ ......................... 6 SALIDA POR PANTALLA DE VARIOS DATOS ................................ .................. 8 DIVISIÓN DE UNA LÍNEA DE CÓDIGO ................................ .............................. 8 PRÁCTICAS ................................ ................................ ................................ ............ 8 3. VARIABLES Y EXPRESIONES ................................ ................................ ......... 9 DECLARACIÓN DE VARIABLES ................................ ................................ ........ 9 Identificador................................ ................................ ................................ .......... 9 Período de duración ................................ ................................ ............................ 10 Ámbito de una variable ................................ ................................ ....................... 10 DECLARACIÓN DE CONSTANTES ................................ ................................ .... 11 TIPO DE DATOS ................................ ................................ ................................ ... 11 EXPRESIONES y OPERADORES................................ ................................ ......... 12 Operadores matemáticos ................................ ................................ ..................... 12 Operadores lógicos................................ ................................ .............................. 13 Operadores de asginación abreviados ................................ ................................ .. 14 PRECEDENCIA DE OPERADORES ................................ ................................ . 14 ASOCIATIVIDAD ................................ ................................ ............................. 14 PRÁCTICAS ................................ ................................ ................................ .......... 15 4. ESTRUCTURAS DE CONTROL ................................ ................................ ....... 16 INTRODUCCIÓN ................................ ................................ ................................ .. 16 IF«THEN«ELSE ................................ ................................ ................................ . 16 Select Case...End Select ................................ ................................ ......................... 17 While... End While ................................ ................................ ................................ . 18 Do...Loop................................ ................................ ................................ ................ 19 For...Next................................ ................................ ................................ ................ 20 For Each...Next ................................ ................................ ................................ ....... 21 Continue ................................ ................................ ................................ ................. 21 Visual Basic .Net | MANEJO DE THREADS 40

GoTo ................................ ................................ ................................ ...................... 22 TRY«CATCH ................................ ................................ ................................ ....... 22 PRÁCTICAS ................................ ................................ ................................ .......... 23 5. PROCEDIMIENTOS Y PARÁMETROS ................................ ........................... 26 INTRODUCCIÓN ................................ ................................ ................................ .. 26 CREACIÓN DE MÉTODOS ................................ ................................ .................. 26 LLAMADA A MÉTODOS ................................ ................................ ..................... 27 6. ARRAYS ................................ ................................ ................................ ............ 29 Declaración de Arrays ................................ ................................ ......................... 29 Redimensionando Arrays ................................ ................................ .................... 29 PROCEDIMIENTOS ................................ ................................ .............................. 29 Declaración de un Procedimiento: ................................ ................................ ....... 30 LLAMADA A UN PROCEDIMIENTO: ................................ ............................ 30 7. STRING Y CONVERSIÓN DE TIPOS ................................ .............................. 31 INTRODUCCIÓN ................................ ................................ ................................ .. 31 DECLARACIÓN DE UN STRING ................................ ................................ .... 31 Acceso a un elemento de un String ................................ ................................ ...... 32 MÉTODOS y PROPIEDADES ................................ ................................ ........... 32 OPERADORES DE COMPARACIÓN EN STRING ................................ .......... 35 CONVERSIÓN DE TIPOS ................................ ................................ ..................... 35 CLASE Convert ................................ ................................ ................................ .. 35 MÉTODO Parse................................ ................................ ................................ .. 37 PRÁCTICAS ................................ ................................ ................................ .......... 37 8. MANEJO DE THREADS ................................ ................................ ................... 38 Implementación de Threads ................................ ................................ ................ 38 Estado de un Thread ................................ ................................ ............................ 38

Visual Basic .Net | MANEJO DE THREADS

41