JSHELL

JShell es una herramienta que se instala con el Java Development Kit (JDK) y es muy útil para probar código Java, sin necesidad de hacer un programa completo y tener que compilarlo.

Para arrancar JShell tendrás que abrir un terminal y teclear:

jshell

Si todo va bien, deberías ver una pantalla similar a la de la siguiente figura:

Si quieres salir de la aplicación, tienes que teclear:

/exit

Nota: si al teclear jshell, no aparece el prompt de la aplicación, puede significar que no tienes instalado el JDK o que no tienes configurada correctamente la variable PATH del sistema.

Utilización como calculadora

Un posibilidad que ofrece JShell y que puede ser útil en determinadas circunstancias es utilizarlo como calculadora. Puedes realizar operaciones matemáticas y tendrás acceso a los métodos de la clase Math y al uso de variables.

Por ejemplo, trata de hacer en tu consola las operaciones que aparecen en la siguiente figura u otras similares:

Observa que, tras cada operación, aparece el signo del dólar ($) seguido de un número. Son variables que quedan guardadas en la memoria y pueden ser invocadas a posteriori. Observa la siguiente serie de operaciones, en la que se reutiliza uno de los resultados obtenidos:

Variables Java

También podemos definir y utilizar variables Java, pero en ese caso habrá que declarar y asignar las variables con su tipo de dato, como lo haríamos dentro de un programa:

Como detalle, puedes ver que estas instrucciones Java no las terminamos en punto y coma. En jshell no es necesario terminar las instrucciones sueltas en punto y coma (Cuando definamos clases, sí que hay que respetar la sintaxis Java).

En cualquier momento puedes consultar la lista de variables que hay en memoria tecleando la orden /vars:

Si quieres borrar totalmente el contenido de la memoria puedes teclear la orden /reset.

Probar código

Es cómodo probar código sin tener que teclear una clase completa, compilarla y ejecutarla. Además, para ver la salida por pantalla de las instrucciones, no necesitamos usar métodos System.out.println():

Probar funciones

Puedes teclear el código de una función y utilizar la función posteriormente.

Las funciones que hayas definido quedan guardadas en memoria. Puedes obtener el listado de las funciones que hayas definido en la sesión utilizando la orden /methods. Si tecleas /reset se borrará la memoria completa, incluyendo variables y funciones.

Clases y objetos

Puedes crear clases y objetos:

Podrías crear también, no solo clases, sino interfaces o enumeraciones. Para listar los tipos de datos que hayas definido en la sesión tienes que teclear la orden /types.

Una vez definido un tipo de datos, puedes crear funciones que lo utilicen, sin necesidad de incluir la función como método del tipo:

Guardar el trabajo

La orden /list sirve para ver las instrucciones que has tecleado. La orden /save, seguida de un nombre de fichero, sirve para guardar dichas órdenes en un fichero y poderlas reutilizar a posteriori. Podrías cargar el fichero en JShell al abrirlo o utilizando la orden /open.

Cargar ficheros

Podemos cargar ficheros existentes utilizando la orden /open. Imagina que tienes un fichero llamado Punto.java, en el directorio en el que has abierto JShell, con el siguiente contenido:

public class Punto {
   public int x, y;

   public Punto(int x, int y) {
      this.x = x;
      this.y = y;
   }   
   public double dist(Punto p) {
      return Math.sqrt(x*p.x + y*p.y);
   }
   public double distOrigen() {
      return Math.sqrt(x*x + y*y);
   }
}

Puedes abrir el fichero y utilizar sus definiciones:

Puedes cargar un fichero en memoria en el momento de abrir JShell tecleando su nombre a continuación de jshell:

jshell Punto.java

El fichero puede ser una clase .java o un fichero de órdenes guardadas previamente con /save. En ambos casos, las ordenes contenidas en el fichero se ejecutarán como si las tecleases dentro del terminal.

Edición en consola

Puedes usar las teclas de flecha arriba/abajo, para editar instrucciones anteriores y moverte dentro de ellas para cambiar su contenido. Esto permite modificar instrucciones anteriores que hayamos utilizado para definir tipos de datos o funciones.

Las instrucciones multilínea aparecerán de una sola vez y podrás moverte dentro de ellas para editarlas.

Cuando se necesita modificar un método ya definido, JShell ofrece el comando /edit seguido del nombre del método. Este comando abre una pequeña ventana de edición gráfica integrada en la que puede modificarse el código y confirmar los cambios con el botón Accept:

 /edit grad2rad

El editor integrado de JShell es una ventana gráfica propia de la herramienta, independiente del editor del sistema operativo. Funciona sin ninguna configuración adicional en Windows, macOS y en Linux con entorno gráfico de escritorio.

💡El editor de JShell se puede utilizar también para editar clases o interfaces. La condición para editar una función o una clase es que tienen que estar definidas previamente.

Un truco útil para crear una clase es definirla vacía en JShell y luego editarla en el editor para completar atributos y métodos de manera más cómoda. Algo parecido se puede hacer con las funciones y los interfaces.

Resumen de órdenes

La tabla siguiente muestra un resumen de las órdenes que hemos mostrado en el artículo.

InstrucciónExplicación
/exitCierra la consola JSHELL
CTRL + LLimpia la pantalla
/varsLista las variables en memoria
/methodsLista las funciones en memoria
/typesLista los tipos de datos definidos
/listLista las órdenes tecleadas con anterioridad
/resetLimpia la memoria de la sesión actual
/open nombre_ficheroAbre un fichero y carga sus definiciones
/save nombre_ficheroGuarda las ordenes en un fichero
/edit identificadorAbre un editor para editar el contenido de una función, un método o un interface

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *