domingo, 21 de septiembre de 2014

Pregunta C# (8 de 20): ¿Cuál es la Diferencia entre break y continue en un Ciclo?

Índice

0. Introducción
1. Contexto
2. Sentencias de Salto
2.1 break
2.2 continue
3. Recursos
4. Conclusiones
5. Glosario
6. Literatura & Enlaces

0. Introducción

Pasamos a la pregunta número 8 (de 20) del curso Twenty C# Questions Explained. En esta oportunidad estudiaremos las diferencias sutiles de las construcciones break y continue en un ciclo. Introduciremos un par de ejemplos muy prácticos para resaltar las diferencias entre estas dos construcciones. Al final tendremos claro los contextos en los que resulta obvio el uso de break o de continue, e inclusive los errores que se podrían generarse en el caso que se usen de forma no apropiada. ¡Empecemos!

1. Contexto

C# como la mayoría de los lenguajes de programación modernos, cuenta con las construcciones básicas de selección, de iteración, e inclusive las sentencias de salto (cfr. Sentencias - Parte 3); entre las que se pueden resaltar en este contexto:
  • break, y 
  • continue
Estas dos construcciones nos son de importante interés en la implementación del cuerpo de un ciclo. Bien debemos saber que los ciclos comprenden las construcciones elementales que modelan los patrones de repetición de un conjunto de sentencias durante un número determinado o variable de veces. C# en su caso, cuentan con las siguientes tipos de ciclos (cfr. Sentencias - Parte 2):
  • while
  • do..while
  • for, y 
  • foreach (versión mejorada del anterior, y apto para colecciones cfr. Enumeradores)
Ahora que poseemos el panorama general de las sentencias de saltos y los ciclos, podemos pasar a relacionar estas dos construcciones, y resaltar algunas diferencias respecto a las primeras.

2. Sentencias de Salto

2.1 break

La sentencia break [5] termina la iteración de las sentencias pertenecientes a un ciclo a una sentencias switch. Cuando break termina la iteración de un ciclo (for, por ejemplo) el control de ejecución pasa a la siguiente sentencia después del bloque del ciclo (conformado por apertura y cierre de corchetes [o llaves]).


Pasemos a desarrollar un ejemplo de uso de break y el ciclo for para la terminación definitiva del cuerpo de implementación de este último:


Archivo C# Usobreak.cs [enlace alternativo]:

Notemos como en las líneas 9-20 especificamos el encabezado del ciclo for y dentro de las llaves de apertura y cierre las instrucciones que se repetirán mientras que la condición de continuación de ciclo (i <= 100) resulte verdadera. Queremos interrumpir la ejecución de las iteraciones de este ciclo cuando el valor de la variable i sea igual a 13; para ello especificamos una sentencia de evaluación if (línea 13) que valida el valor de esta variable. Cuando esto suceda, la sentencia break entra en juego: finaliza la ejecución del ciclo for. En caso contrario, entonces se invoca el método Tarea (líneas 26-29) con el valor actual de la variable i.

Compilación:


  1. csc /target:exe Usobreak.cs

Ejecución assembly:


  1. .\Usobreak.exe

> Prueba de ejecución (ideone.com):

> Prueba de ejecución (local):
UsoBreak.exe
Figura 1. Ejecución assembly UsoBreak.exe.

2.2 continue

La sentencia de salto continue [6] se encarga de pasar o transferir el control a la siguiente iteración de un ciclo for, while, do..while, y foreach. A diferencia de break, continue no detiene la ejecución del ciclo, en su lugar, omite la ejecución del resto de sentencias que aparecen después de su especificación dentro del mismo ciclo. Ahora procedamos a demostrar su uso y la diferencia frente a su contraparte:

En la línea 15 validamos que el valor de la variable i sea menor o igual a 5. Mientras que la validación resulte verdadera, se pasa el control a la siguiente iteración del ciclo for (líneas 9-21). Lo anterior lo logramos con la especificación de la sentencia continue. Cuando la variable i sea mayor a 5, la prueba de if no se cumple y se continua con la siguiente sentencia del ciclo ubicada en la línea 20.

Compilación:


  1. csc /target:exe Usocontinue.cs

Ejecución assembly:


  1. .\Usocontinue.exe

> Prueba de ejecución (ideone.com).

> Prueba de ejecución (local):
Ejecución assembly Usocontinue.exe
Figura 2. Ejecución assembly Usocontinue.exe.

3. Recursos

Este es el vídeo en donde el equipo de expertos (Gerry O'Brein y Paul Pardi) de MVA responden y explican esta pregunta:

4. Conclusiones

La explicación a esta pregunta ha resultado clave para comprender la diferencia entre las construcciones (sentencias) break y continue en un ciclo. Demostramos su uso y diferencia especificando un sentencia de validación que promueve la salida definitiva del ciclo (break) y el salto a una siguiente iteración del ciclo en cuestión (continue). Debemos ser cuidadosos en el uso de estas dos construcciones para la continuación o salida de un ciclo, pues su uso inapropiado puede llevar a problemas lógicos no detectables por el propio compilador de C#. En la próxima pregunta nos concentraremos en diferenciar las funciones virtuales y abstractas.

5. Glosario

  • Ciclo
  • Patrón
  • Repetición
  • Sentencia de salto

6. Literatura & Enlaces

[1]: Twenty C# Questions Explained - http://www.microsoftvirtualacademy.com
[2]: Sentencias en C# - Parte 3 | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2013/10/sentencias-en-c-parte-3.html
[3]: Sentencias en C# - Parte 2 | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2013/10/sentencias-en-c-parte-2.html
[4]: Enumeradores en C# | OrtizOL - Experiencias Construcción Software (xCSw) - http://ortizol.blogspot.com/2014/08/enumeradores-en-csharp.html
[5]: break (C# Reference) - http://msdn.microsoft.com/en-us/library/adbctzc4.aspx
[6]: continue (C# Reference) - http://msdn.microsoft.com/en-us/library/923ahwt1.aspx


J

No hay comentarios:

Publicar un comentario

Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.