programacion

Page 1

Instrucciones y excepciones


Descrición General

Introducción a las instrucciones

Uso de instrucciones condicionales

Use instrucciones iterativas

Uso de instrucciones de salto

Tratamiento de excepciones básicas

Lanzamiento de excepciones


 Introducción a las instrucciones

Bloques de instrucciones

Tipos de instrucciones


Bloques de instrucciones 

Se usan llaves para delimitar bloques {{

Un bloque y su bloque padre o pueden tener una variable con el mismo nombre

// // code code }}

{{ int int i; i; ... ... {{ int int i; i; ... ... }}

Bloques hermanos pueden tener variables con el mismo nombre {{

int int i; i; ... ... }} ... ... {{ int int i; i; ... ...

}} }}


Tipos de instrucciones Instrucciones Condicionales Instrucciones Condicionales Las instrucciones if y switch Las instrucciones if y switch Instrucciones de iteración Instrucciones de iteración Las instrucciones while, do, for, y foreach Las instrucciones while, do, for, y foreach Instrucciones de salto Instrucciones de salto Las instrucciones goto, break, y continue Las instrucciones goto, break, y continue


 Uso de instrucciones condicionales

La instrucción if

Instrucción if en cascada

La instrucción switch

Problema: ¿Dónde está el error?


La instrucción if 

Sintaxis:

if ( expresión­booleana ) if ( expresión­booleana ) primera­instrucción­incrustada primera­instrucción­incrustada else else segunda­instrucción­incrustada segunda­instrucción­incrustada 

No hay conversión implicita de int a bool

int x; int x; ... ... if (x) ... if (x) ... // Debe ser if (x != 0) en C# // Debe ser if (x != 0) en C# if (x = 0) ... // Debe ser if (x == 0) en C# if (x = 0) ... // Debe ser if (x == 0) en C#


Instrucciones if en cascada

enum Palo { Treboles, Corazones, Diamantes, Picas} enum Palo { Treboles, Corazones, Diamantes, Picas} Palo cartas = Palo.Corazones; Palo cartas = Palo.Corazones; if (cartas == Palo.Treboles) if (cartas == Palo.Treboles) color = “Negro”; color = “Negro”; else if (cartas == Palo.Corazones) else if (cartas == Palo.Corazones) color = “Rojo"; color = “Rojo"; else if (palo == Palo.Diamantes) else if (palo == Palo.Diamantes) color = "Rojo"; color = "Rojo"; else else color = “Negro"; color = “Negro";


La instrucción switch 

Las instrucciones switch se usan en bloques de varios casos

Se usan instrucciones break para evitar caídas en cascada (fall through)

switch (palo) { switch (palo) { case Palo.Treboles : case Palo.Treboles : case Palo.Picas : case Palo.Picas : color = "Negro"; break; color = "Negro"; break; case Palo.Corazones : case Palo.Corazones : case Palo.Diamantes : case Palo.Diamantes : color = "Rojo"; break; color = "Rojo"; break; default: default: color = "ERROR"; break; color = "ERROR"; break; }}


 Uso de instrucciones iterativas

La instrucción while

La instrucción do

La instrucción for

La instrucción foreach

Problema: ¿Dónde está el error?


La instrucción while 

Ejecuta instrucciones en función de un valor booleano

Evalúa la expresión booleana al principio del bucle

Ejecuta las instrucciones mientras el valor int i = 0; booleano sea True int i = 0; 

while (i < 10) { while (i < 10) { Console.WriteLine(i); Console.WriteLine(i); i++; i++; }}

0 1 2 3 4 5 6 7 8 9


La instrucción do 

Ejecuta instrucciones en función de un valor booleano

Evalúa la expresión booleana al final del bucle

Ejecuta las instrucciones mientras el valor booleano sea True

int i = 0; int i = 0; do { do { Console.WriteLine(i); Console.WriteLine(i); i++; i++; } while (i < 10); } while (i < 10);

0 1 2 3 4 5 6 7 8 9


La instrucción for 

La información de actualización está al principio del bucle

for (int i = 0; i < 10; i++) { for (int i = 0; i < 10; i++) { Console.WriteLine(i); Console.WriteLine(i); }}

0 1 2 3 4 5 6 7 8 9

Las variables de un bloque for sólo son válidas en el bloque

for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++) Console.WriteLine(i); Console.WriteLine(i); Console.WriteLine(i); // Error: i está fuera de ámbito Console.WriteLine(i); // Error: i está fuera de ámbito 

Un bucle for puede iterar varios valores

for (int i = 0, j = 0; ... ; i++, j++) for (int i = 0, j = 0; ... ; i++, j++)


La instrucción foreach 

Elige el tipo y el nombre de la variable de iteración

Ejecuta instrucciones incrustadas para cada elemento de la clase collection

ArrayList numeros = new ArrayList( ); ArrayList numeros = new ArrayList( ); for (int i = 0; i < 10; i++ ) { for (int i = 0; i < 10; i++ ) { numeros.Add(i); numeros.Add(i); }} foreach (int number in numeros) { foreach (int number in numeros) { Console.WriteLine(numero); Console.WriteLine(numero); }}

0 1 2 3 4 5 6 7 8 9


 Uso de instrucciones de salto

La instrucción goto

Las instrucciones break y continue


La instrucción goto

Transfiere el flujo de control a una instrucción con etiqueta

Pueden dar lugar fácilmente a código “spaghetti” de difícil interpretación

if (numero % 2 == 0) goto Par; if (numero % 2 == 0) goto Par; Console.WriteLine(“impar"); Console.WriteLine(“impar"); goto Fin; goto Fin; Par: Par: Console.WriteLine(“par"); Console.WriteLine(“par"); Fin:; Fin:;


Las instrucciones break and continue 

La instrucción break salta fuera de una iteración

La instrucción continue salta a la siguiente iteración

int i = 0; int i = 0; while (true) { while (true) { Console.WriteLine(i); Console.WriteLine(i); i++; i++; if (i < 10) if (i < 10) continue; continue; else else break; break; }}


 Tratamiento de excepciones básicas

¿Por qué se emplean excepciones?

Objetos excepción

Uso de bloques try­catch

Bloques catch múltiples


¿Por qué se emplean excepciones?

El tradicional tratamiento procedural de errores es demasiado complicado

Lógica del programa Lógica del programa

int errorCodigo = 0; int errorCodigo = 0; FileInfo source = new FileInfo("code.cs"); FileInfo source = new FileInfo("code.cs"); if (errorCodigo == ­1) goto Fallo; if (errorCodigo == ­1) goto Fallo; int longitud = (int)source.Length; int longitud = (int)source.Length; if (errorCodigo == ­2) goto Fallo; if (errorCodigo == ­2) goto Fallo; char[] contenido = new char[longitud]; char[] contenido = new char[longitud]; if (errorCodigo == ­3) goto Fallo; if (errorCodigo == ­3) goto Fallo; // No hay problemas ... // No hay problemas ... Fallo: ... Fallo: ... Trat. De errores Trat. De errores


Obejetos Excepción

Exception Exception SystemException SystemException OutOfMemoryException OutOfMemoryException IOException IOException NullReferenceException NullReferenceException ApplicationException ApplicationException


Uso de bloques try­catch 

try { try {

Solución orientada a objetos para el tratamiento de errores 

Poner el código normal en un bloque try

Tratar las excepciones en un bloque catch aparte

Console.WriteLine("Escriba un número"); Console.WriteLine("Escriba un número"); Lógica del programa Lógica del programa int i = int.Parse(Console.ReadLine()); int i = int.Parse(Console.ReadLine());

}} catch (OverflowException capturada) catch (OverflowException capturada) {{ Console.WriteLine(capturada); Console.WriteLine(capturada); }}

Tratamiento de errores Tratamiento de errores


Bloques catch múltiples

try try {{

Cada bloque catch captura una clase de excepcion

Un bloque try puede tener un bloque catch general

Un bloque try no puede capturar una clase derivada de una clase capturada en un bloque catch anterior Console.WriteLine(“Escriba el primer número"); Console.WriteLine(“Escriba el primer número"); 

int i = int.Parse(Console.ReadLine()); int i = int.Parse(Console.ReadLine()); Console.WriteLine("Escriba el segundo número"); Console.WriteLine("Escriba el segundo número"); int j = int.Parse(Console.ReadLine()); int j = int.Parse(Console.ReadLine()); int k = i / j; int k = i / j;

}} catch (OverflowException capturada) {…} catch (OverflowException capturada) {…} catch (DivideByZeroException capturada) {…} catch (DivideByZeroException capturada) {…}


 Lanzamiento de excepciones

La instrucción throw

La cláusula finally

Comprobación de desbordamiento aritmético

Normas para el tratamiento de excepciones


La instrucción throw

Lanza una excepción apropiada

Asigna a la excepción un mensaje significativo

throw expression ; throw expression ; if (minuto < 1 || minuto >= 60) { if (minuto < 1 || minuto >= 60) { throw new InvalidTimeException(minuto + throw new InvalidTimeException(minuto + " no es un minuto válido"); " no es un minuto válido"); // !! Not alcanzado !! // !! Not alcanzado !! }}


La cláusula finally

Las instrucciones de un bloque finally se ejecutan

Monitor.Enter(x); Monitor.Enter(x); try { try { ... ... }} finally { finally { Monitor.Exit(x); Monitor.Exit(x); }}

Bloques catch opcionales Bloques catch opcionales


Comprobación de desbordamiento aritmético 

Por defecto, el desbordamiento aritmético no se comprueba 

Un comando checked activa la comprobación de desbordamiento

checked { checked { int numero = int.MaxValue; int numero = int.MaxValue; Console.WriteLine(++numero); Console.WriteLine(++numero); }} unchecked { unchecked { int numero = int.MaxValue; int numero = int.MaxValue; Console.WriteLine(++numero); Console.WriteLine(++numero); }}

OverflowException OverflowException Se lanza un objeto excepción. WriteLine no se ejecuta

MaxValue + 1 es negativo?

­2147483648


Normas para el tratamiento de excepciones 

Lanzamiento 

Evitar excepciones para casos normales o esperados

Nunca crear ni lanzar objetos de clase Exception

Incluir una cadena de descripción en un objeto Exception

Lanzar objetos de la clase más específica posible

Captura 

Ordenar los bloques catch de lo específico a lo general

No permitir que salgan excepciones de Main


Práctica – Compartición y seguridad de los recursos de red


Turn static files into dynamic content formats.

Create a flipbook
Issuu converts static files into: digital portfolios, online yearbooks, online catalogs, digital photo albums and more. Sign up and create your flipbook.