UD 2: Estructuras básicas de control. Estructuras de selección.
Profesor: Néstor Martínez
Índice 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11.
Condiciones simples. El tipo lógico. Operadores de comparación. Comparación de cadenas (Strings). Operadores lógicos. Precedencia de operadores. Instrucción “if…else…”. Instrucción “switch”. El operador ternario. Introducción a las excepciones. Indentación.
1. Condiciones simples. En la resolución de un problema, es a menudo
necesario tomar decisiones en función de las características del mismo, esto es, se necesita poder alterar la secuencia de cálculos que se efectúan en función de los datos de entrada, o de resultados obtenidos con antelación. Las instrucciones condicionales permiten construir programas que tomen decisiones acerca de los cálculos a efectuar en función de las características del problema.
1. Condiciones simples. Controlar el flujo es determinar el orden en el que se
ejecutarán las instrucciones en nuestros programas. Si NO existiesen las sentencias de control, entonces los programas se ejecutarían de forma secuencial, empezarían por la primera instrucción e irían una a una hasta llegar a la ultima. Pero, obviamente este panorama seria muy malo para el programador. Por un lado, en sus programas no existiría la posibilidad de elegir uno de entre varios caminos en función de ciertas condiciones (sentencias de selección). Y por el otro, no podrían ejecutar algo repetidas veces, sin tener que escribir el código para cada una (sentencias repetitivas).
1. Condiciones simples. Para estos dos problemas tenemos dos soluciones: las
sentencias de control selectivas y las repetitivas. Estos dos conjuntos de sentencias se les llama estructuradas o estructuras de selección y repetitivas, porque a diferencia de las simples pueden contener en su cuerpo otras sentencias. Las sentencias selectivas se llaman así porque permiten elegir uno de entre varios caminos por donde seguirá la ejecución del programa. Esta selección viene determinada por la evaluación de una expresión logica. Este tipo de sentencias se dividen en tres: (las vemos en esta unidad) La sentencia if. La sentencia if-else. La sentencia switch.
1. Condiciones simples. A las sentencias repetitivas se les conoce también como
sentencias iterativas ya que permiten realizar algo varias veces (repetir, iterar). Estudiaremos las siguientes: (siguiente unidad didáctica) La sentencia while La sentencia do..while La sentencia for
1. Condiciones simples. Selección (pseudocódigo)
Inicio SI condición Sentencias 1 SINO Sentencias2 FIN SI Fin
Se evalúa la condición: si es cierta se ejecutan las
Sentencias 1 y si es falsa las Sentencias 2. Se ejecuta unas o las otras sentencias pero NUNCA los dos caminos.
1. Condiciones simples. Actividad 1: Hacer un pseudocódigo para guiar a una
persona a salir de esta clase hasta la calle. Considerar:
Que pueden haber puertas cerradas. Doblar a la izquierda o derecha solamente, no es una orden precisa. Indicar el giro en grados. Este ejercicio requiere ordenes secuenciales y selectivas. Discutirlo.
1. Condiciones simples. Hasta el punto 7 de esta unidad, hacer caso omiso de
los if y else, los veremos en el punto 7.
Hasta entonces vamos a estudiar los operadores
lógicos, y luego gracias a ellos formar estructuras selectivas gracias a las instrucciones if, if…else y switch.
1. Condiciones simples. Ejemplo: Se desea determinar si cierta variable
temperatura tiene un valor mayor o menor que 100 (escribiendo un mensaje según lo sea o no). Esto podría expresarse mediante las instrucciones: Si (temperatura>100) System.out.println("La temperatura es mayor que 100!"); Sino System.out.println("La temperatura es menor o igual que 100");
Una vez escrito el mensaje correspondiente, la
ejecución del programa continuará en la instrucción siguiente (que en el ejemplo aparece indicada mediante puntos suspensivos).
2. El tipo lógico. La condición anterior: temperatura>100
adquiere al ser evaluada (del mismo modo que cualquier otra condición) uno de los dos posibles valores lógicos: cierto falso
que se denotaran en los programas como: true o false.
Se denomina expresión lógica, a cualquier expresión, secuencia de operandos y operadores, que al ser evaluada tiene uno de los valores: true o false. Naturalmente, cualquier condición es una expresión lógica.
2. El tipo lógico. Toda expresión lógica tiene además como tipo de datos el tipo lógico que se denotara en los programas como: boolean. boolean alta; ……… alta = temperatura > 100; Si (alta) System.out.println("La temperatura es mayor que 100!"); Sino System.out.println("La temperatura es menor o igual que 100");
Los dos únicos valores constantes que puede tener
cualquier expresión de tipo boolean son los ya mencionados: true o false.
3. Operadores de comparación. Los operadores de comparación, también denominados
operadores relacionales, se utilizan para comparar entre sí valores de elementos que tienen el mismo tipo simple. Son tipos simples los tipos numéricos ya vistos, junto con el tipo char y el boolean. Los operadores y su significado se listan a continuación:
3. Operadores de comparaciรณn.
4. Comparación de cadenas (Strings). La comparación entre dos cadenas (Strings) se realiza en
Java de un modo distinto a como se efectúa la comparación entre valores pertenecientes a tipos elementales (tipos de datos simples). Un String es en Java un objeto, por lo que las operaciones de comparación se efectúan mediante la notación de punto, que se estudiará más adelante. Pero os adelanto que se tendrá que utilizar el método equals() de la clase String, el cual recibe un parámetro de tipo Object que puede ser un String, que será la cadena a comparar.
4. Comparación de cadenas (Strings). Ejemplo: Scanner teclado = new Scanner(System.in); String asig = teclado.nextLine(); Si (asig.equals("PRO")) System.out.println("Sí, es de primero"); Sino Si (asig.equals("PMM")) System.out.println("No, es de segundo"); Sino Si (asig.equals("PES")) System.out.println("No es de DAM y es de segundo de DAW"); Sino Si ... ... Sino Si (asig.equals(«DI")) System.out.println("No, es de segundo"); Sino System.out.println("No es de este Ciclo Formativo");
5. Operadores lógicos. Es
posible construir una nueva expresión lógica yuxtaponiendo otras expresiones lógicas, ligadas entre sí mediante las denominadas conectivas lógicas. Si
5. Operadores lógicos. Además de la conectiva del ejemplo anterior para expresar
la conjunción o y-lógico &&, existen también conectivas para expresar la disyunción u o-lógico ||, la o-exclusiva ^ y la negación ! Ejemplo1: temperatura es mayor o igual que 15. Si
Ejemplo2: temperatura NO está comprendida entre 0 y 100.
(no sale en el examen XOR)
5. Operadores lógicos.
COMO CURIOSIDAD
La disyunción exclusiva
puede ser expresada en términos de conjunción lógica (^), disyunción lógica (v), y negación (¬) de la siguiente manera: La conjunción exclusiva puede ser expresada de la siguiente manera: Esta representación del XOR puede resultar útil en la construcción de un circuito o una red, ya que sólo tiene un operador y un número reducido de operadores . La prueba de esta identidad es la siguiente:
A veces es útil escribir
de las siguientes formas:
5. Operadores lógicos. Java proporciona dos operadores diferentes para cada una de las
conectivas.
Los denominados cortocircuitados tienen la particularidad de que
en las subexpresiones donde aparecen se evalúa, siguiendo el recorrido de izquierda a derecha, la mínima parte de la subexpresión necesaria para conocer el valor lógico. Si no se cumple la condición de un término no se evalúa el resto de la operación.
Por ejemplo: (a == b && c != d && h >= k) tiene tres evaluaciones: la primera comprueba si la variable a es igual a b. Si no se cumple esta condición, el resultado de la expresión es falso, ya que las tablas de verdad de la AND dicen que si un operando de los dos es falso, el resultado es falso, por lo tanto no se evalúan las otras dos condiciones posteriores.
Sin embargo, cuando se utiliza un operador no cortocircuitado
se produce siempre la evaluación de toda la subexpresión donde éste aparece. En Java, los operadores no cortocircuitados para la conjunción y la disyunción son respectivamente: & y |. NO LOS VAMOS A USAR.
5. Operadores lógicos. A continuación, se muestran las tablas de verdad
de los operadores lógicos vistos:
5. Operadores lógicos. A continuación, se muestran las tablas de verdad de los operadores lógicos vistos: (continuación) TRUCO: Puedes ver el valor de true como si fuera un 1, y el
valor de false como si fuera un 0. Luego el operador lógico && (AND) como si fuera el producto *, y el operador lógico || (OR) como si fuera la suma +. Ejemplo:
true && true -> 1 *1 =1 >0 TRUE true && false -> 1*0 =0 FALSE true || false -> 1+0 =1 >0 TRUE true || true -> 1+1 =2 >0 TRUE Siempre que sea >0 será TRUE. Si es <=0 será FALSE.
6. Precedencia de operadores. M a y o r p r e c e d e n ci a
Dentro de una misma expresión, si nos encontramos varios operadores de un mismo grupo, tendrán preferencia mayor de derecha a izquierda.
Recuérdese que las expresiones se evalúan, por defecto, de izquierda a derecha.
7. Instrucción “if…else…”. 1ª forma: La forma más simple de una instrucción
condicional en Java es la siguiente: if (B){ S }
donde S es una instrucción (por ej., una asignación seguida de “;”) o bloque cualquiera, y B una condición (expresión lógica). Su ejecución se efectúa evaluando la condición B, de forma que si es cierta se ejecuta S. Al acabar la ejecución de la instrucción (o bloque), ésta continúa en la instrucción siguiente a la condicional.
7. Instrucción “if…else…”. La idea básica de esta sentencia es la de encontrarnos
ante una bifurcación de un camino, en la que seguiremos por uno u otro camino dependiendo de la respuesta a una pregunta que se halla escrita en la bifurcación.
Una variante de esto es que en lugar de dos
posibilidades, se nos presenten más caminos por los que poder seguir.
7. Instrucción “if…else…”.
7. Instrucción “if…else…”. Esta sentencia evalúa una condición: si la condición es cierta
ejecuta un código, si no es cierta ejecuta el código a continuación del ELSE (si éste existe) o la instrucción inmediatamente después del bloque de instrucciones del IF.
7. Instrucción “if…else…”. 2ª forma: La otra forma de instrucción condicional es: if (B){ S1
}else{ }
S2
donde S1 y S2 son instrucciones simples (o bloques)
cualesquiera. Su ejecución se efectúa evaluando la condición B, de forma que si esta es cierta se ejecuta S1, por lo contrario, si no es cierta, se ejecuta S2. Al acabar la instrucción condicional la ejecución continúa en la instrucción siguiente.
7. Instrucción “if…else…”. Ejemplo:
7. Instrucción “if…else…”. CONSEJO: Java te aconseja que uses las llaves { } para englobar en bloques las instrucciones que se ejecutarán si se cumple la condición del if o del else. Si NO usas las llaves, si se evalúa a cierto la condición del if o del else, se ejecutará solamente la primera instrucción que siga al if o al else. Ejemplo: if(temperatura>10) temperatura=20; System.out.println(temperatura); La instrucción temperatura=20, sólo se ejecutará si se cumple la condición temperatura>10, y el System siempre se ejecutará, independientemente que se cumpla o no la condición temperatura>10, incluso de que esté tabulado.
7. Instrucción “if…else…”. Una sentencia if evaluará primero su condición, y Si el resultado es true ejecutara la sentencia o bloque de sentencias que se encuentre justo después de la condición. Si la condición se evalúa como false y si existe una cláusula else, entonces se ejecutara la sentencia o bloque de sentencias que siguen al else. Esta parte es opcional. Si NO existe una cláusula else ejecutará la siguiente instrucción después del bloque de instrucciones que engloba el if. La única restricción que se impone a la expresión
condicional es que sea una expresión válida de tipo booleano que se evalúe como true o como false.
7. Instrucción “if…else…”. Ejemplo 1: Código que elige el mayor de dos enteros:
(NO es ejecutable, faltaría declaración de la clase y el main). int a=3, b=5, m; if (a<b) m=b; else m=a;
7. Instrucción “if…else…”. Ejemplo 2: Código con una instrucción condicional sin
parte else, donde se imprime si un numero es par o impar: (NO es ejecutable, faltaría declaración de la clase y el main). int a=3; String mensaje="El numero " + a + " es "; if (a%2 != 0) mensaje+="im"; mensaje+="par."; System.out.println(mensaje);
7. Instrucción “if…else…”. Ejemplo 2: Código con una instrucción condicional sin
parte else, donde se imprime si un numero es par o impar: (NO es ejecutable, faltaría declaración de la clase y el main). (continuación) Produciendo el resultado :
El numero 3 es impar. (Por pantalla) El numero 4 es par. (Por pantalla) Dependiendo de si a es inicializada a 3 o a 4.
7. Instrucción “if…else…”. Ejemplo 3:
7. Instrucción “if…else…”. Reglas para el if 1. La condición va entre paréntesis 2. La línea del if y else NO lleva punto y coma (;) 3. El IF y el ELSE se ejecuta para una sola sentencia, la que le sigue en el programa, la inmediatamente siguiente. 4. Si se necesita más de una sentencia se encierra entre llaves. Esto se llama bloque, comentado ya en la unidad didáctica 1. 5. NO es obligado poner un else si éste no se utiliza. 6. Tabula SIEMPRE todas aquellas instrucciones que estén dentro de un if o un else.
7. Instrucción “if…else…”. Estructura “else if” Es posible construir una serie de comprobaciones
uniendo un if a la cláusula else de un if anterior.
7. Instrucción “if…else…”. Estructura “else if” Ejemplo:
7. Instrucción “if…else…”. Estructura “else if” IMPORTANTE: En este tipo de secuencias de sentencias
if-else anidadas, las clausulas else siempre se emparejan con el if más cercano sin else. Para variar este comportamiento se deben utilizar llaves para crear bloques de sentencias.
7. Instrucción “if…else…”. “if” anidados Ejemplo:
8. Instrucción “switch” En la resolución de muchos problemas surge la
necesidad de efectuar cálculos diferentes para distintos valores de una única variable o expresión simple. Por ejemplo, alguna variable de entrada tiene 10 posibles valores distintos, y para cada uno de los mismos es necesario un tratamiento especial, se podría utilizar una instrucción "if...else...“ anidada; sin embargo ésta suele ser difícil de leer y mantener, por ello Java introduce una instrucción condicional adicional con el objetivo de facilitar el tratamiento de casos como el anterior.
8. Instrucción “switch” Esta sentencia examina los valores de una
variable y en base a ello ejecuta sentencias independientes.
8. Instrucción “switch”
Es la instrucción "switch", que tiene la siguiente forma general:
Aquellas componentes que aparecen entre corchetes indican opcionalidad
(pueden o no aparecer). expresion es una expresión de un tipo simple cualquiera. A partir de la API 7 se permite que sea también una cadena de texto String. La serie de valores val1, val2, ... valn, son todos valores compatibles con el de expresión. SC1, SC2, ... SCn+1, son instrucciones (o secuencias de instrucciones) cualesquiera. Se abre una llave para iniciar los posibles valores que pueda tomar dicha variable.
8. Instrucción “switch” La ejecución de una instrucción switch es como sigue: Se evalúa en primer lugar la expresión, comparándose el valor resultante con el de cada uno de los valores asociados a las etiquetas case, si coincide con alguno entonces se ejecuta todo el código que sigue a la etiqueta case correspondiente, incluso el asociado a las etiquetas case posteriores, hasta que, o bien se finaliza toda la instrucción switch, o bien se encuentra una instrucción break, en cuyo caso toda la instrucción switch se acaba inmediatamente. Si ninguno de los valores coincide con el de la expresión entonces se ejecuta, si existe (es opcional), la instrucción o bloque asociado a la etiqueta default. Una vez finalizada la ejecución del switch, el programa continúa a partir de la instrucción siguiente.
8. Instrucción “switch” Ejemplo:
8. Instrucción “switch” NOTA: El programa se va ejecutando hasta acabar el
switch o encontrar un break. Si entra en un caso y no encuentra un break, realizará las instrucciones de los case que tiene por debajo de él (incluso lo que haya en el default, si lo hay) hasta encontrar un break o acabar el switch.
Ten en cuenta: Dentro del CASE no se necesitan llaves. El programa entra en el DEFAULT si no entró en otra
opción. El BREAK hace que el CASE se termine y con ello el SWITCH entero.
8. Instrucción “switch” Ejemplo:
En este caso, si paso==1, entrará en el case 1, y hará también
todos los demás casos, ya que no hay un break. Si paso==3, haría su propio caso, case 3, y al no haber un break, realizaría también los casos por debajo de él, hasta encontrar un break, en este caso solo realizaría case 4.
8. Instrucción “switch” La sentencia DO..WHILE junto con la selectiva
múltiple (switch) son muy utilizadas para formar “menús” que permiten a los usuarios seleccionar funcionalidad de los programas. Un menu es entonces una estructura de repetición con opciones, que solo finaliza con una de estas. ESTO LO VEREMOS EN UNIDADES POSTERIORES NO HACE FALTA QUE SEPÁIS HACERLO YA.
8. Instrucción “switch” Ejemplo:
8. Instrucción “switch” COSAS QUE NO SE PUEDEN HACER: Primera: switch (variable){ case >10: //lo que sea }
Segunda: switch (variable){ case 10 && 12: //lo que sea }
8. Instrucción “switch” CONCEPTOS EQUIVOCADOS: Si ponemos lo siguiente: int variable =11; switch (variable){ case 10: case 12: System.out.println(“Hola”); } Alguien puede pensar que se mostraría por pantalla alguno de los dos mensajes, pero NO se muestra nada por pantalla, los case no hacen de rangos a no ser que se lo indiquemos de la siguiente manera (siguiente diapositiva):
8. Instrucción “switch” CONCEPTOS EQUIVOCADOS: Si ponemos lo siguiente: int variable =11; switch (variable){ case 10: case 11: case 12: System.out.println(“Hola”); } El código anterior se comportaría como una especia de rango… mostraría por pantalla “Hola” cuando variable>=10 && variable<=12 ya que cuando variable valga alguno de los valores 10, 11 o 12 entrará en el case y hará lo que haya en los siguientes case hasta que encuentre un break o se acabe el switch. CUIDADO si hay un default, lo hace también si no encuentra antes un break.
9. El operador ternario. Java introduce operador ternario. Uso parecido al de una
instrucción condicional. Forma general: exprbool ? expr1 : expr2
Donde exprbool es cualquier expresión de tipo boolean y
expr1 y expr2 son expresiones cualesquiera del mismo tipo. En primer lugar se evalúa la exprbool que se encuentra a la izquierda del interrogante. Si el resultado de dicha evaluación es true entonces el valor de toda la expresión es el valor de la expr1, en caso contrario, el valor de toda la expresión es el valor de la expr2.
9. El operador ternario. ď&#x201A;&#x2014; Ejemplo 1:
ď&#x201A;&#x2014; Ejemplo 2:
10. Introducción a las excepciones.
Frecuentemente existen secuencias de instrucciones
que pueden provocar efectos no deseados, o incluso errores de ejecución debido a que los datos a ser tratados no cumplen las condiciones necesarias para que las instrucciones actúen correctamente. Ejemplo:
Tiene sólo sentido si la variable período tiene valor distinto de cero cuando se intente efectuar la división.
El lenguaje Java introduce un nuevo término: excepción,
para definir y también poder tratar errores de ejecución.
10. Introducción a las excepciones. Una excepción es una condición anormal que ocurre
durante la ejecución de un segmento de código.
Siendo excepciones frecuentes, como ya se ha dicho, las
de índole matemático, como son la división por cero, o el intento de asignar un valor de un tipo a una variable de otro tipo incompatible con el tipo del valor (Ej. int a = “hola”;).
10. Introducciรณn a las excepciones.
10. Introducción a las excepciones. Ejemplo:
Al ser ejecutado el programa anterior se obtendría lo
siguiente:
10. Introducción a las excepciones. El lenguaje Java permite un tratamiento especial de las
excepciones, de forma que no supongan siempre la finalización del programa, sino la ejecución de un código de tratamiento diseñado por el programador.
10. Introducción a las excepciones. Tratamiento básico de errores:
Para evitar las excepciones, los errores, y en general los posibles funcionamientos incorrectos (tal como todos los señalados anteriormente) será necesario garantizar que cualquier secuencia de instrucciones se ejecute siempre bajo las condiciones debidas para su correcta actuación. Lo que se podrá conseguir haciendo uso de las instrucciones condicionales estudiadas; así, en cada uno de los casos anteriores se podría escribir:
10. Introducción a las excepciones.
Control de excepciones. Bloques “try…catch…finally”:
Para tratar excepciones deberemos usar la instrucción try (que
significa intentar en español).
try { //instrucciones que pueden causa excepciones }
Entre las llaves de try escribiremos el código que hará funcional
nuestro programa. Para capturar la excepción que puede generar este código necesitaremos otra instrucción llamada catch (capturar). catch(NombredeExcepcion obj){ //codigo para tratar el error }
Entre las llaves del catch escribiremos el código que queramos
para tratar el error. El programa continúa por la siguiente instrucción después del fin del catch, independientemente de si ha entrado al try o al catch.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Forma básica de un bloque de gestión de excepciones con finally:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Podemos unir varios catch en vez de poner varios y
separados, aunque perderemos esa agudeza de mostrar un mensaje por cada excepción diferente que se lance. A esto se le llama multicatch. Se haría de la siguiente forma: try{ . . . }catch (Exception e1 | Exception e2 | … | Exception eN){ . . . }
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Captura de Excepciones: try: Indica que las sentencias de su bloque pueden producir algún tipo de excepción. catch: Este bloque captura las excepciones producidas en el try. Puedo tener los catch que yo quiera. Uno por cada Excepción o uno solo y que capture la Excepción padre de todas Exception. finally: El bloque finally es opcional, pero en caso de existir éste se ejecutará siempre, tanto si ocurre una excepción como si no.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Básicamente, el significado es como sigue: Se intenta (try) ejecutar un bloque de código. Si se produce un error, el sistema lanza una excepción (throws) que puede ser capturada (catch) en base al tipo de excepción (mediante las instrucciones correspondientes). Dependiendo de la excepción se ejecutará un bloque de código u otro. Finalmente, tanto si se ha producido o no una excepción y si ésta no ha sido tratada, se ejecutan las instrucciones asociadas a la cláusula (finally). El bloque finally es opcional, pero en caso de existir éste se ejecutará siempre. Al finalizar todo el bloque, la ejecución se reanuda del modo habitual. SIEMPRE que aparece una sentencia try, debe existir al menos
una sentencia catch o finally.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Ejemplo 1: Como todo el mundo sabe, el dividir por cero es una
indeterminación, con lo cual este tipo de operaciones provocará en el programa el siguiente error provocando una finalización anormal del mismo: Una forma de controlar esta situación es la siguiente:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Ejemplo 2: Otra forma de controlar la excepción.
NOTA: Si se dividen dos números de tipo double, y se guarda en una variable de tipo double, NO LANZARÁ EXCEPCIÓN, devolverá Infinity. Para que lance dicha excepción todos los tipos de las variables con las que se están operando deben ser sin decimales (int, long).
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Ejemplo 3: Otra forma de controlar la excepción.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Ejemplo 4: Otra forma de controlar la excepción.
En este ejemplo tratamos de convertir una cadena de un numero a un entero. Pero la variable cadena contiene un espacio en blanco, lo que provocará un error de ejecución que trataremos mostrando por pantalla el mensaje de error.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Si te fijas en los ejemplos anteriores, en la cláusula catch, se le pasan varios tipos de excepciones: NumberFormatException: introducimos caracteres que no son
numéricos. ArithmeticException: de tipo aritméticas, por ejemplo, división entre cero.
Se ponen estas excepciones porque se conoce qué
excepciones pueden ocurrir. Si NO sabes qué excepción puede ocurrir, pon la excepción más general que es Exception, es la padre de todas las excepciones, todas heredan de ella.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”: Ejemplo: Uso de finally.
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
10. Introducción a las excepciones. Control de excepciones. Bloques “try…catch…finally”:
11. Indentación. La Real Academia Española no reconoce la palabra
indentación. La Real Academia recomienda utilizar el termino sangrado. En los lenguajes de programación de computadoras, la indentación es un tipo de notación secundaria utilizado para mejorar la legibilidad del código fuente por parte de los programadores, teniendo en cuenta que los compiladores o interpretes raramente consideran los espacios en blanco entre las sentencias de un programa. Son frecuentes discusiones entre programadores sobre cómo o dónde usar la indentación, si es mejor usar espacios en blanco o tabuladores, ya que cada programador tiene su propio estilo.
11. Indentación. El objetivo fundamental de la indentación del código
fuente es facilitar su lectura y comprensión. Hay dos tipos de posibles lectores del código fuente: Programas: les da igual la indentación, leen bien nuestro código siempre que cumpla la sintaxis del lenguaje Personas: Debe centrarse en la lectura y comprensión del código por personas.
Para entender cómo hay que indentar un código primero
hay que entender como lo lee una persona. Actualmente la mayor parte de las personas que leen código fuente lo hacen con editores de texto simples o con la ayuda de los editores de los entornos de desarrollo. Por tanto nos vamos a centrar en este tipo de lectores.
11. Indentación. Cuando una persona lee un código fuente, lo hace
siguiendo una serie de patrones de lectura. Si queremos facilitar la lectura del código lo primero que hay que entender son estos patrones. La mejor bibliografía sobre patrones de lectura son los libros que ensenan sistemas de lectura rápida; dos puntos fundamentales de estos sistemas son el estudio de los patrones de movimiento de la vista y el reconocimiento de la estructura del texto.
11. Indentación. Los patrones de lectura nos indican el movimiento que
siguen los ojos al leer un texto. Cuando leemos un texto, la vista se desliza a saltos, no se desplaza de una manera continua. Nuestra vista capta la información que haya alrededor del punto en el que se detiene la vista. Un buen lector hace pocas paradas para leer una línea, aprovechando mas su campo visual.
11. Indentación. Por otra parte, al leer también utilizamos la visión
periférica, aprovechando la estructura y disposición que tienen las letras para extraer información adicional del texto. Así, por ejemplo, instintivamente nos fijamos en el principio del párrafo para buscar la información relevante, y nos ayudamos de elementos como las listas, los tabuladores, tablas y otros elementos tipográficos al leer. De estos puntos deducimos que la posición absoluta y relativa de los elementos que componen el texto del código fuente juegan un papel importante a la hora de facilitar la lectura y comprensión del mismo.
11. Indentación.
Requerimientos para definir un estilo de indentación. Vamos a enumerar los principales requisitos para poder definir un buen estilo de indentación. Algunos de los mas importantes serán: Que el posicionamiento de los elementos dentro del texto sea predecible. Cuanto más predecible es la posición, el movimiento de los ojos llega antes a los puntos relevantes del código fuente. El punto mas relevante de información es siempre el principio de la línea, por lo que hay que tener especial atención en el. Que la relevancia de la agrupación de los elementos refleje la relevancia de estos dentro del programa.
11. Indentación.
Requerimientos para definir un estilo de indentación. Priorizar la identificación del flujo del programa
frente al detalle de los elementos que lo componen. Por ejemplo es mas importante siempre tener una visión global de lo que hace una función que del detalle de como se declaran sus variables. Que los comentarios respeten la indentación de los elementos a los que van asociados, posicionándose de manera relativa a ellos según su relevancia. Si el lenguaje lo permite, hay que distinguir la relevancia de un comentario posicionándolo sobre el elemento (mas importante) o al lado de el (menos importante). Es mejor situar los comentarios antes del elemento, ya que nos sirven de introducción a lo que va a continuación, y muchas veces nos permitirá saltarnos un bloque de código que no nos interesa.
11. Indentación.
Requerimientos para definir un estilo de indentación. Utilizar la indentación basada en tabuladores. La
indentación basada en el uso de caracteres de espacio en blanco es menos flexible que la basada en tabuladores, ya que los editores y entornos de desarrollo modernos permiten adaptar con facilidad el ancho de los tabuladores al gusto de cada programador. Utilizar el menor número de normas de indentación requerido. Indentar elementos en exceso complica visualmente la lectura del código, si no son estrictamente necesarios.
11. Indentación.
Requerimientos para definir un estilo de indentación. Mantener el tamaño de las líneas dentro de los
márgenes de la pantalla, siempre que sea posible. Debemos tener en cuenta al lector potencial del código fuente. No se debe pensar que el lector tiene una pantalla demasiado pequeña o grande, sino asumir que el lector tiene una pantalla típica dentro del entorno de desarrollo habitual. Por ejemplo actualmente los desarrolladores suelen tener pantallas capaces de mostrar 40 líneas y 120 columnas de caracteres con facilidad. En este caso, utilizar el antiguo margen de 80 columnas por línea y 25 líneas por pantalla es mas bien escaso.
11. Indentación. NOTA: Si tiene dudas si la palabra a usar es “identar” o “indentar” tome en cuenta que el sufijo “i” no se usa en Idioma Español. El sufijo correcto es “in”. La palabra original en ingles es “indent”.
11. Indentación. SUGERENCIA: Se indenta siempre dentro de llaves. Siempre se indenta el IF, el SWITCH, el CASE, y el WHILE En estas sentencias se abre llave en la misma línea y se cierra frente a dicha sentencia. Se deja una línea en blanco antes de la clase, SWITCH y WHILE.
11. Indentación. En Java existen tres tipos de comentarios: Comentario de párrafo. /* Esto es un comentario que puede tener mas de una línea */
Comentario de línea. // Esto sirve para comentar una única línea
Comentario de documentación. /** Esto además de ser un comentario sirve para que el programa javadoc documente nuestro programa automáticamente */
Se puede leer mas en http://www.upct.es/~orientap/ConvencionesCodigoJava.pdf
Ejercicios. Actividad 0: Realiza un programa donde pidas al usuario
un numero y decir si es par o impar. Hacer también el pseudocódigo y una traza del programa pseudocódigo. Actividad 1: Realiza un programa donde pidas dos valores numéricos al usuario y escríbelos ordenadamente de mayor a menor (incluso si hay varios iguales). Hacer también el pseudocódigo y una traza del programa pseudocódigo. Actividad 2: Realiza un programa donde pidas tres valores numéricos al usuario y escríbelos ordenadamente de mayor a menor (incluso si hay varios iguales). Hacer también el pseudocódigo y una traza del programa pseudocódigo.
Ejercicios. Actividad 3: Realiza un programa donde pidas al usuario que
ingrese 2 números y el programa calcule el cociente y resto entero. Avisar que no es posible cuando el divisor es cero. Hacer también el pseudocódigo y una traza del programa pseudocódigo. Actividad 4: Realiza un programa donde pidas al usuario el año de nacimiento de una persona. Tu programa mostrará la edad que tendrá a fin de año (o sea que cumplirá durante el año lectivo). Decir si es mayor o menor de edad. Decir si falleció o si aun no ha nacido Cuando este pronto testearlo con los años: 1900 1950 2000 2050 Hacer también el pseudocódigo y una traza del programa pseudocódigo.
Ejercicios.
Actividad 2: SOLUCIÓN.
Scanner teclado = new Scanner(System.in);
nextInt(); nextInt(); nextInt();
Ejercicios.
Actividad 2: SOLUCIÓN (continuación).
System.out.println System.out.println System.out.println