marzo 6, 2018

Limpiar consola en Java

Introducción

Para las personas que nos gustan las aplicaciones a la antigua, y que más que nada lo hacemos para experimentar, nos viene bien saber cómo limpiar la consola o terminal en Java. Lo malo es que no es tan fácil como en otros lenguajes.

Buscando por internet encontré lo que expongo en este post. También explico cómo es que funciona internamente.

Código

El código de ejemplo lo dejo a continuación. Simplemente se encarga de ejecutar el archivo cmd.exe (un archivo de Windows, también conocido como símbolo del sistema) y pasarle argumentos, como explico más abajo.

Como vemos, el método puede lanzar excepciones, por eso lo encerramos en un bloque try/catch. Sin embargo, no estamos reaccionando a ninguna excepción. Esto es porque al menos yo pienso que no debería importarnos mucho si la consola se limpia o no; o si no se encuentra el ejecutable.

Es decir, no intervendría de gran manera en nuestra aplicación.

Explicación del comando

Lo único que hacemos con Java es ejecutar una nueva instancia del cmd, o el símbolo del sistema. Le pasamos la opción /c, con la cual indicamos que por favor ejecute el comando que le indicamos y luego se cierre a sí mismo. ¿y qué comando es? pues el comando para limpiar la pantalla: cls.

Voy a probarlo en un GIF:

Como se ve, se limpia la terminal inmediatamente. Y claro que sería más fácil llamar simplemente a cls, pero cls no es un ejecutable, sino un comando del ejecutable cmd. Por eso debemos llamarlo de ese modo para limpiar la pantalla en Windows.

Ejecutando código

Y finalmente aquí dejo un GIF de la ejecución del programa

Suma de números en Go

Introducción

Ya me gustó esto de hacer pequeños ejercicios con Go. Pero bueno, vamos a hacer otro en donde simplemente devolvemos la suma de 2 números que pedimos por pantalla. Muy simple pero nos da una pequeña introducción al lenguaje.

Ejemplo de código

Lo único que hacemos es declarar 2 variables al inicio. Luego, les asignamos un valor dependiendo de lo que el usuario elija.

Abajo asignamos el resultado a una tercera variable. No es necesario declarar su tipo, pues si estamos sumando enteros el resultado será por lo tanto entero.

Finalmente imprimimos.

Ejecución del programa

Aquí dejo un GIF en donde se ejecuta el programa.

Tablas de multiplicar en Go

Introducción

Recordando mis primeros ejercicios de programación, en alguna ocasión tuve que imprimir las tablas de multiplicar de diferentes maneras.

Una de ellas era pedir cuál tabla quería ver, y entonces se imprimía. Por ejemplo, si el usuario decía que quería la tabla del 5, entonces se imprimía 5 x 1 = 5…. hasta 5 x 10.

En otro ejercicio, se pedía hasta cuál tabla se quería ver. Por ejemplo, si el usuario quería hasta la tabla del 3, entonces imprimíamos la tabla del 1, luego la del 2 y finalmente la del 3.

Hoy veremos cómo hacer esos dos sencillos pero reconfortantes y nunca olvidados ejercicios.

Tabla de multiplicar en donde el usuario elige cuál desea ver

Comencemos con este problema, en donde el usuario elige y nosotros imprimimos la tabla. Quedaría así:

Hacemos un for que va desde 1 hasta 10. Ya que la condición dice que el ciclo se ejecute siempre y cuando el número sea menor o igual que 10. Cuando sea 11, ya no valdrá, así que sólo llega al 10.

Dentro del ciclo, asignamos el resultado de multiplicar el número en el que vamos (1, 2, 3… hasta 10) por la tabla (lo que introduce el usuario). Finalmente lo imprimimos y listo.

Ejecución del programa

Así se ve, por ejemplo, la tabla del 7:

Tablas de multiplicar hasta donde el usuario elija

Ahora vamos a imprimir muchas tablas, el límite lo pondrá el usuario. Es decir, primero será la tabla del 1, luego la del 2 y así hasta donde el usuario quiera. Queda así:

Ahora el usuario nos da el límite, y la tabla es parte del ciclo. Tenemos un ciclo dentro de otro. El primero se encarga de ir tabla por tabla, y el segundo imprime del 1 al 10 multiplicados por la tabla.

Ejecución

Así se ve al ejecutarse:

Leer datos por teclado en Go | Versión 2

Introducción

Ayer escribí cómo leer datos del usuario que son pedidos por consola. La versión que hice fue un poco larga para un proceso tan simple, así que aquí traigo una versión mejorada que me recuerda más a cuando leíamos variables en C con scanf.

La ventaja de esto es que podemos leer muchas variables de varios tipos, con la conversión automática.

Código de ejemplo

Pondré el mismo ejemplo de ayer, en donde elegíamos nuestra botana (si así se le puede llamar) favorita. La diferencia es que ahora leeremos un número entero. Es importante notar que al leer con Scanln pasamos como argumento la dirección de la variable, no la variable en sí.

A lo que acabamos de hacer se le puede llamar lectura sin formato, porque lee toda la entrada. Podríamos igualmente leer un flotante, una cadena, etcétera.

 

Sentencias de control en Go: If y Switch

Introducción

Este tutorial pretende ser muy sencillo. Simplemente explica cómo funciona la sentencia if, else y switch. Veremos cómo a veces vamos a preferir switch, y cómo aquí no tenemos que utilizar break cuando lo utilizamos.

If y else

Comencemos con la sentencia if. A diferencia de otros lenguajes, la condición no va entre paréntesis. Y aunque el cuerpo ocupe una línea, debemos encerrarlo entre llaves.

La forma más simple del if y else es esta:

Al ejecutar el código, se imprime “Verdadero”:

También puede haber if sin else

En este caso imprimimos sólo si la condición se cumple; en caso de que no, no hacemos nada. Recordemos que un if siempre puede ir sin else.

Podemos hacer negaciones

Recuerdo que cuando inicié a programar (con C) hace algunos años, me ocurrió algo muy gracioso. No sabía cómo hacer un else sin un if. Es decir, dejaba el if (con la condición) vacío, y ejecutaba el código sólo en el bloque del else.

Si tan sólo mis profesores (y no los culpo) me hubieran enseñado que las condiciones se pueden negar con ! las cosas serían distintas. En fin, podemos negar una variable, el resultado de una función, etcétera.

 

En este caso estamos negando a false, lo que da como resultado true.

Utilizar and y or

Dos de las compuertas lógicas básicas: and, en donde todas las condiciones deben cumplirse. Y or, en donde al menos una de ellas debe cumplirse.

La salida al ejecutar el programa es la siguiente:

5 > 0 && 10 > 9
1 < 2 && 5 > 1
4 > 9 || 3 < 10

If anidados con else

Podemos crear tantos if y elses como deseemos, aunque en estos casos se prefiere el switch, que veremos más abajo. En fin, así se ve:

La salida será Excelente. Si la calificación no cumple ninguna condición, el programa irá al else, en donde dirá “Sin palabras”.

If anidados

Puede que deseemos ejecutar múltiples cosas en varios bloques if, así:

En este caso utilizamos el operador módulo, que se encarga de sacar el residuo de una división. Por ejemplo, al dividir 10 entre 3, el residuo es 1; es por ello que sabemos que 10 no es múltiplo de 3. Pero no pasa lo mismo con 5 y 2.

Asignar variables antes de iniciar la condición

A veces es necesario asignar una variable que utilizaremos dentro de la condición. Para ello, podemos hacerlo como en los ejemplos de arriba, en donde asignamos calificación. O podemos hacerlo así:

En este caso es un ejemplo sin sentido, pues no utilizamos a edad dentro del if o else, pero ilustra correctamente.

Por favor notar que esta variable sólo vivirá dentro del if (y else, si es que ponemos); ya que si la queremos utilizar fuera de éstos habrá errores.

Asignar variables dependiendo de condición

Para terminar, veremos cómo asignar un valor dependiendo de una condición.

Qué bueno que hice este ejemplo, así también puedo demostrar que si una variable es booleana o devuelve un booleano, no es necesario compararlo con == true o con == false. Es decir, es lo mismo:

if variable == true{} y if variable{}

Así como:

if variable == false{} y if !variable{}

Switch

Esto será sencillo. Switch es como un if, pero más limpio. Permite comparar muchas condiciones, y sólo evalúa una de ellas; cuando se cumple, ya no ejecuta las demás.

Lo que más me gusta de esto es que podemos no sólo comparar números, sino cadenas y resultados de funciones.

Si ninguna condición se ejecuta, se llama a default.

Finalmente quiero hacer que noten que no es necesario el uso de break como en otros lenguajes, ya que el switch se termina cuando una de sus condiciones se cumple.

Evaluando muchas condiciones

Podemos evaluar varias condiciones que se verían confusas con bloques if. Notar por favor que es como si se comparase con ==, y no podemos utilizar >= o <=

 

Comparando cadenas

Podemos comparar tanto cadenas como números enteros. Si queremos hacerlo con cadenas, puede ser así:

Y también podemos declarar variables que sólo serán visibles en el ámbito del switch. Por ejemplo, así se vería el ejemplo de arriba: