Anuncios
Anuncios

Bienevenidos sean a este post, hasta ahora hemos mencionado algunos metodos que nos permiten escapar de un bucle o devolver un valor al final de un metodo pero para que se usan realmente? y que otros tenemos disponibles?

Hablemos primero sobre el break, este es el metodo por excelencia para poder salir de un bucle, de un case o de cualquier situacion que sea necesaria, como su nombre lo indica hace un corte o quiebre, break, para poder interrumpir la secuencia y nos permite retomar el control del programa, se utiliza especialmente para salir de estructuras de control como for o switch.

Nuestro siguiente caso es continue, el cual trabaja de forma de similar pero no sale de una estructura de control sino que nos permite saltar el paso que estemos dando actualmente, por ejemplo tenemos un bucle for y bajo una cierta condicion podemos hacer que omita la transaccion actual por medio del continue pero seguira corriendo el bucle, cuando veamos el ejemplo quedara mas claro.

Anuncios
Anuncios

El otro metodo es return, este es similar a break ya que nos permite salir de un metodo pero a diferencia de break no solamente saldra sino que tambien nos da la posibilidad de devolver un dato, por este motivo siempre lo encontraremos al final de los metodos, y aunque no lo declaremos muchas veces esta de forma implicita, por ejemplo con void, en otras circunstancias puede suceder lo mismo que terminemos el programa pero el lenguaje al final del mismo enviara un return aunque sea vacio.

Anuncios

Por ultimo tenemos a goto, este es un metodo que sufre bullying por los programadores desde tiempos inmemorables en cualquier lenguaje, ya que nos provee la capacidad de poder saltar de una parte del codigo a otro por medio de una etiqueta, esto es una opcion barbara pero que genera adiccion y nos puede producir que generemos muchisimos saltos dejando un codigo completamente ilegible, por eso es una opcion que no se recomienda ni tampoco se comenta mucho, su sintaxis es:

goto etiqueta;
Anuncios

Donde etiqueta sera un nombre cualquiera que lo identificaremos de la siguiente forma:

etiqueta:
... instrucciones ...
Anuncios

Recuerden que la etiqueta debe coincidir exactamente como la mencionamos en el goto de lo contrario no funcionara, una vez comentado los metodos procedamos a ver un ejemplo, vamos a crear un archivo llamado otros.cs:

otros.cs

using System;

public class Program
{
    public static int Main()
    {
        string pares = "", impares = "";
        int[] numeros = { 10,11,12,13,14,15,16,17,18,19,20 };
        foreach (int numero in numeros)
        {
		if ((numero%2)==0)
		{
			pares += numero + ",";
			continue;
		} else {
			impares += numero + ",";
		}
		Console.WriteLine(numero);
        }
        Console.WriteLine("Los numeros pares son: " + pares);
        Console.WriteLine("Los numeros impares son: " + impares);
        return 0;
    }
}
Anuncios

Este codigo lo usaremos para separar los numeros pares de los impares de una serie de numeros, para este caso vamos a crear tres variables, dos de tipo string para almacenar los valores pares e impares, vean como tambien podemos asignarles valores de forma mas directa, no es lo recomendable pero cuando el codigo es chico no acarrea inconvenientes, despues tendremos un array de tipo int al cual llamaremos numeros y le asignaremos numeros del 10 al 20 (inclusive), para nuestro siguiente bloque usaremos un foreach donde pasaremos por todos los valores de numeros, primero veamos el bloque en cuestion:

        foreach (int numero in numeros)
        {
		if ((numero%2)==0)
		{
			pares += numero + ",";
			continue;
		} else {
			impares += numero + ",";
		}
		Console.WriteLine(numero);
        }
Anuncios

En este caso usaremos un condicional donde chequeara que el modulo (es decir el resto de la division) de la division con 2 es igual a cero, en caso de ser verdadero agregaremos a numero dentro de pares, y le seguiremos con una coma entre comillas dobles, luego ejecutaremos un continue para saltar a la siguiente posicion, en caso de que sea impar agregaremos el valor a impares, por ultimo mostraremos el valor de numero, si todo sale bien solo se vera con los numeros impares.

Nota: y seguramente se preguntaran porque permitio agregar un valor int en una string, esto es gracias a la coma que agregamos entre comillas, la mayoria de los lenguajes actuales cuando encuentran esta situacion efectuan una concatenacion es decir que transforman todos los valores a string pero no modifican el tipo de dato de la variable, esto se llama inmutabilidad pero de esto ya hablamos en este post.
Anuncios

Por ultimo cuando salimos del bucle mostraremos en pantalla los valores obtenidos por la intervencion de nuestro programa, compilemos y probemos:

C:\Users\tinchicus\Documents\Visual Studio 2019>otros
11
13
15
17
19
Los numeros pares son: 10,12,14,16,18,20,
Los numeros impares son: 11,13,15,17,19,
Anuncios

De esta salida podemos sacar varias deducciones, la primera es que el continue funciono de manera perfecta porque al ser el valor par le dijimos que omita el paso con el continue y no lo mostro en pantalla pero si lo impares, despues veremos como efectivamente funciono a la perfeccion nuestro condicional porque separo los numeros entre pares e impares, por ejemplo podriamos comentar la linea que muestra el valor de numero de la siguiente forma:

// Console.WriteLine(numero);
Anuncios

Si lo volvemos a compilar y ejecutamos veremos la siguiente salida:

C:\Users\tinchicus\Documents\Visual Studio 2019>otros
Los numeros pares son: 10,12,14,16,18,20,
Los numeros impares son: 11,13,15,17,19,

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

En este caso nos desaparecieron los numeros del bucle pero el programa funciono de manera perfecta, con lo que hicimos anteriormente podemos dejar esa linea para monitorear que el programa ante una eventual falla, de esto hablabamos en este post, tomemos nuevamente el codigo y modifiquemos el bucle del foreach de la siguiente manera:

        foreach (int numero in numeros)
        {
		if ((numero%2)==0)
		{
			pares += numero + ",";
			continue;
		} else {
			impares += numero + ",";
		}
		if (numero == 14)
			break;
		// Console.WriteLine(numero);
        }
Anuncios

En este caso agregamos un nuevo condicional al final donde verifica si numero es igual a 14 y en caso de ser cierto procede a salir del programa, si lo compilamos y probamos, que creen que pasara?

C:\Users\tinchicus\Documents\Visual Studio 2019>otros
Los numeros pares son: 10,12,14,16,18,20,
Los numeros impares son: 11,13,15,17,19,

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Absolutamente nada porque como dijimos antes en los numeros pares sale del bucle para pasar al siguiente ignorando al resto del bloque, para solucionarlo podemos hacer dos cosas:

  • Modificar el valor a un numero impar (p.e 13)
  • Modificar el codigo para que lo verifique antes del continue
Anuncios

Para el segundo caso podemos modificar el bloque del foreach de la siguiente manera:

        foreach (int numero in numeros)
        {
		if (numero == 14)
			break;
		if ((numero%2)==0)
		{
			pares += numero + ",";
			continue;
		} else {
			impares += numero + ",";
		}
		// Console.WriteLine(numero);
        }
Anuncios

En este caso lo primero que hara sera verificar el valor de numero y si este es igual a 14 procede a salir del bucle, compilemos y probemos:

C:\Users\tinchicus\Documents\Visual Studio 2019>otros
Los numeros pares son: 10,12,
Los numeros impares son: 11,13,

C:\Users\tinchicus\Documents\Visual Studio 2019>

Como pueden observar llego hasta el 14 y salio y nos devolvio hasta donde pudo procesarlo, esta es la mayor diferencia entre break y continue, por ultimo vamos a ver un ejemplo de goto para ello modificaremos el codigo de la siguiente manera:

using System;

public class Program
{
    public static int Main()
    {
        string pares = "", impares = "";
        int[] numeros = { 10,11,12,13,14,15,16,17,18,19,20 };
        foreach (int numero in numeros)
        {
		if (numero == 14)
			goto Hola;
		if ((numero%2)==0)
		{
			pares += numero + ",";
			continue;
		} else {
			impares += numero + ",";
		}
		// Console.WriteLine(numero);
        }
        Console.WriteLine("Los numeros pares son: " + pares);
        Console.WriteLine("Los numeros impares son: " + impares);
	return 0;

	Hola:
	Console.WriteLine("Esto fue llamado por GOTO");
	return 0;
    }
	
}
Anuncios

Este es un ejemplo simple pero practico, modificamos el condicional anterior y le decimos que en lugar de usar un break haga un goto a la etiqueta Hola, nosotros definimos la etiqueta Hola, en este caso la etiqueta esta por detras del return 0 de nuestro codigo donde mostrara un mensaje haciendo referencia a que lo llamo goto y devolvera 0 con el return saliendo del programa, si lo compilamos y probamos veremos lo siguiente:

C:\Users\tinchicus\Documents\Visual Studio 2019>otros
Esto fue llamado por GOTO

C:\Users\tinchicus\Documents\Visual Studio 2019>
Anuncios

Si volvieran a poner el condicional detras del continue el programa funcionara de nuevo y omitira completamente a la etiqueta Hola, como pueden darse cuenta podemos tener dos programas completamente distintos en un solo codigo pero eso seria demasiado confuso al momento de depurarlo (corregir errores) porque si bien puede resultar practico ahora con programas mas complejos sera un terrible dolor de cabeza.

Anuncios

Como podran darse cuenta salvo goto, el resto son los metodos que mas usaremos durantes nuestras carreras.

Anuncios

En resumen, hoy hemos visto un poco mas en profundidad a break, como se usa, para que sirve, tambien hemos visto a continue, como se usa, para que sirve, hemos hablado del return y para que se usa principalmente y por ultimo del goto, hemos visto un ejemplo practico para poner todo en practica, hemos visto la principal diferencia entre break y continue, y por ultimo como usar a goto, aunque esto no sea recomendable, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00