Fundamentos de Android - Bucles y estructuras de control
Esta lección es la continuación de la anterior tipos de datos y pruebas lógicas, como veras mas adelante, y cuando tengas mas experiencia, deberás de tener claro como se hacen bucles y selecciones, ¡es fundamental! estoy seguro de que volverás aquí mas de una vez a consultar o recordar como se hacia el bucle que tienes en mente (a mi me pasa) jejejeje.
Como ya has ido viendo, en Android, se usa el punto y coma ";" para cerrar las líneas de codigo, pues bien, para hacer condiciones, bucles y selecciones, se usan los paréntesis para definir la condición"(condición)" y las llaves "{codigo...}" para contener el codigo que se ejecurara en cada caso.
Por favor, presta muuuuuucha pero que muuucha atención a los ejemplos en este sentido, muchas veces lo que nos falla es esto, no haber puesto un paréntesis o una llave en su sitio, parece una gilipollez (que lo es), pero el 90% de las veces es esto (ya lo veras) ;P por eso pongo codigo REAL, para que veas como se pone, que es lo que mas me ayudo a mi! :) ¡¡basta de cháchara!! comencemos por los tipos de bucles!!
Ejemplo Condicional simple en Android
Esta estructura te servirá para realizar una determinada accion si se cumple una determinada prueba lógica (predefinida por ti previamente) por ejemplo, en la siguiente imagen, compruebo SI la variable "nivel" es mayor ">" a 5. Si se cumple esta condición, se ejecuta el codigo que hay entre las llaves. Lo que hago en este codigo es "resetear" esta variable y ponerla a 1 ¿por que? eso ya es por el funcionamiento que tiene mi app, lo importante aquí es que veas que la sintaxis es:
if (condición) { ejecuta este codigo si se cumple la condición; }
Codigo real de ejemplo: (ojito con las llaves, punto y coma y los paréntesis)
Ejemplo de Condicional completo en Android
Este estructura es igual a la anterior, solo que le añadimos que hacer si NO se cumple la condición que hemos programado. En ocasiones nos interesa controlar que hacer cuando SI se cumple y cuando NO se cumple, como digo, esto debes de ser tu el que lo decida (que usar en cada caso) y dependerá que quieres que haga tu app. Se que sin experiencia, te suena cuanto menos raro, pero, cuando veas ejemplos, veras que esto es muuuuu sencillo!! ¡¡animoooo!!
La sintaxis es igual, solo que añadimos la palabra ELSE y otro juego mas de llaves que encierra el codigo a ejecutar si la condición NO se cumple.
if (condición) { //ejecuta este codigo si se cumple la condición codigo SI; }else{ //Ejecuta este codigo si la condición no se cumple: codigo NO; }
Codigo real de ejemplo: (ojito con las llaves, la cosa se comienza a complicar)
Ejemplo de Condicionales complejos en Android
En ocasiones, hay que concatenar varios condicionales, que a su vez contienen otros condicionales... puff estas cosas hay que tomárselas con mucha calma y estudiarlo muy bien, ya que se forma un lío de llaves muy considerable, os pongo un ejemplo de un fragmento de codigo de como genero un numero aleatorio, pero que no se repitan los números (una locura) jejejeje
Como ves es FUNDAMENTAL el tema de las llaves y tabular bien en codigo, acuerdate de la lección que hablábamos sobre las combinaciones de teclas, una de estas ayudas, te tabula el codigo según las llaves que encuentra.
Ejemplo de Selección múltiple según valor o condición en Android
Esta estructura es útil para hacer una selección con múltiples opciones pero sabiendo que valor va a tener la variable. Esto es muy común para usarlo en los menús o en las listas, por que en estas, el primer item de la lista vale 0, el segundo 1, el tercero 2..... por consiguiente, sabes que hacer en cada caso.
La estructura es simple, entre paréntesis (variable) pones la variable a comparar y en cada "case" lo que quieres que quieres ejecutar según valga esa variable que pusiste en la condición
switch (variable) { case 0: //codigo a ejecutar... break; case 1: //Codigo a ejecutar... break; case 2: //Codigo a ejecutar... break; default: //Codigo a ejecutar si no se cumple ningún caso anterior break; }
En este caso yo lo use para un menú, este menú tiene 2 opciones. En la línea(990) donde pongo el switch, encierro entre paréntesis el ID de la lista seleccionable donde se encuentra el menú, esta variable recibe una variable de tipo entero que al ser 2 opciones, recibirá 0 o 1. Como ves, en los "case" líneas(992) y (999) tengo el valor que me devolverá ese ID, y dependiendo de que pulso (un menú u otro) realizare una opción en cada caso. Otra cosa importante es el "default:" este codigo se ejecutara en el caso de no encontrar un valor que contenga los casos.
Recuerda, que esta lección no tiene como fin que entiendas este codigo de los menús, solo es para que veas un ejemplo real del switch y el tema de los paréntesis y corchetes, así que no te agobies, es normal que no entiendas todavía este codigo completamente, mas adelante explicare el tema de los menús.
Cuando se quiere repetir un codigo en concreto, un numero determinado de veces, teniendo en cuenta una condición y/o evaluación de una variable, y que esta vaya variando/actualizándose, deberemos de usar BUCLES INTERACTIVOS. Hay de varios tipos (voy a poner los 3 que yo conozco)
Estructura y ejemplo FOR en Android
Este tipo de BUCLE sirve para repetir el cogido encerrado entre las llaves {....} mientras se cumpla la condición que definamos. Esta estructura de control, consta de 4 elementos o partes:
1. Inicialización de la variable. Esta parte del bucle, solo se ejecutara LA PRIMARA VEZ que se ejecute este FOR.
2. Condición a evaluar. En esta parte se fija la condición a cumplir, hay que tener mucho cuidado, y que sea una condición que no sea infinita, si no la aplicación se "colgara" y no saldrá de este bucle nunca.
3. Actualización. Una vez que termina la ejecución del codigo entre las llaves y antes de volver a evaluar la condición del paso 2, ejecutara lo que pongamos en este lugar.
4. Codigo. A continuación, se pone entre {...} el codigo a ejecutar en cada bucle o ciclo.
For (inicialización; condición; actualización) { //codigo a ejecutar si se cumple la condición; }
Veamos un ejemplo real: En la línea(454) defino las condiciones de todo el bucle. Inicializo la variable <i> a 0. <n> es un valor que he definido en otra parte del programa (imagínate que su valor es 5), lo que hará este FOR es ejecutar 5 veces el codigo que hay en las llaves, ¿por que? pues porque cada vez que ejecuta el codigo de las {} después, ejecuta el codigo (i++) que significa"incrementa en 1 la variable i", por lo que cada vez i valdrá 1, 2, 3, 4 y 5. Cuando la variable i valga 5 será = a n por lo que ya no será menor, y dejara de ejecutarlo.
Estructura y ejemplo WHILE en Android
Personalmente este bucle es el que mas utilizo yo, es con el que mas cómodo me siento, es una chorrada, pero lo veo mas sencillo y mas limpio.
Este bucle, primero evalúa la condición, si la cumple, ejecuta el codigo que se encuentra entre las llaves {....}, luego vuelve a evaluar la condición, y vuelve a ejecutar el codigo entre las llaves {....}, y así hasta que deje de cumplirse. Mucho ojo, en el codigo debes incluir algo que controle la evaluación de la condición, para que esta no sea infinita, si no el programa nunca saldrá de este bucle. :s
While (condicion) { //codido a ejecutar si se cumple la condición; }ऊउਉउउ䔀瀭灨硟汭
Como ves en la sintaxis de arriba, este bucle es muy sencillo. En el ejemplo real, imagina que la variable i viene con un valor = 1. El codigo entre las llaves hará lo que nos convenga, pero tendremos que estar seguros de que vaya modificando alguna variable donde se realiza la condición, ya que si no, este bucle será infinito, en este caso, incremento en uno la variable i para que solo se reputa 5 veces.
Recuerda!! mucho ojo a los paréntesis, los punto y la coma ";" y las llaves!!
Espero que quede mas o menos claro esto de los bucles y condicionales de Android, como digo y acabo siempre: - Ten paciencia, esto no es fácil, necesitas tiempo para digerir estos conocimientos.
Si te a gustado este sitio, puedes hacer click en me gusta en Facebook, Google+, Tweeter... es el único precio que te pido por este trabajo! ;P. Compartiendo, ayudaras a otros a encontrar esta web! GRACIASSSS.