- Java es conocido por ser adecuado para proyectos grandes y de largo plazo, pero también puede ser una herramienta excelente para tareas pequeñas
- La verificación estática de tipos y el excelente soporte de herramientas también ofrecen grandes ventajas en trabajos pequeños
- Las mejoras recientes del lenguaje han hecho a Java todavía más útil
Ejecutar sin compilar
Sintaxis concisa: métodos main de instancia y clases implícitas
- JEP 477: simplifica la escritura de programas pequeños y scripts
- Elimina la sintaxis engorrosa de antes (
public static void main):
var someVariable = initialValue;
String helper(int param) { ... }
void main(String[] args) {
...
}
- La importación automática del módulo
java.base aumenta la comodidad
- Los métodos
println, print y readln también se importan automáticamente
Records y Enums
- Records: permiten representar datos estructurados en lugar de diccionarios de Python
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}
- Enums: una forma más intuitiva de expresar enumeraciones que en Python
enum Direction { NORTH, EAST, SOUTH, WEST };
Funciones útiles del lenguaje y de la API
- Uso de
var: permite usar variables sin declarar tipos en scripts
static import: permite cálculos matemáticos más concisos
import static java.lang.Math.*;
var diagonal = sqrt(pow(width, 2) + pow(height, 2));
- Bloques de texto: mantienen código y datos juntos y mejoran la legibilidad
- Potentes bibliotecas de cadenas, expresiones regulares, colecciones y fecha/hora
- Lectura de archivos:
var content = Files.readString(Path.of(filename));
- Ejecución de procesos externos:
String run(String... cmd) throws Exception {
var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();
process.waitFor();
return new String(process.getInputStream().readAllBytes());
}
Manejo de dependencias y JBang
- JBang: permite agregar dependencias de Maven directamente en el archivo fuente
//DEPS org.eclipse.angus:jakarta.mail:2.0.3
- Entonces se puede ejecutar así
jbang MailMerge.java
- Convertir el script en ejecutable:
///usr/bin/env jbang "$0" "$@" ; exit $?
Entorno de notebooks
Ventajas de los notebooks
- Programación exploratoria: ideal para trabajar con datos y ejecutar código de una sola vez o de pequeña escala
- Estructura de celdas de código y texto:
- Los resultados de ejecutar celdas de código pueden mostrarse como texto, tablas, imágenes, audio o video
- Se puede repetir el proceso de prueba y error hasta obtener el resultado deseado y luego añadir comentarios
- Mejor que JShell:
- Es más fácil trabajar por celdas
- Se pueden revisar visualmente tablas de datos y gráficos
- Guardar y compartir es sencillo
Jupyter y los notebooks de Java
- Jupyter Notebook: una herramienta ampliamente usada por científicos de datos de Python
- Puede ejecutarse de forma local o en la nube (por ejemplo, Google Colab)
- La tecnología de Jupyter es independiente del lenguaje:
- Se pueden instalar kernels para varios lenguajes (por ejemplo, IJava, JJava, Ganymede, Rapaio)
- Jupyter Java Anywhere: simplifica la instalación del kernel de Java usando JBang
- Limitaciones:
- Cada kernel maneja las dependencias y la visualización de resultados no textuales de manera distinta
- El kernel IJava tiene algunos problemas con la resolución de dependencias
- Oracle o los principales proveedores deberían ofrecer un servicio tipo Colab dedicado a Java
Procesamiento de datos y visualización en Java
- Python facilita el procesamiento de datos con bibliotecas como NumPy y Matplotlib
- En Java todavía falta un ecosistema comparable
- tablesaw:
- Puede usarse como alternativa a NumPy
- Ofrece soporte de visualización usando el paquete JavaScript de Plot.ly
Proyecto JTaccuino
- JTaccuino:
- Un notebook de Java en desarrollo por Sven Reimers
- Ofrece una UI amigable basada en JavaFX
- Usa JShell como backend
- Está en una etapa temprana, pero tiene mucho potencial de evolución
Kotlin Notebook
- Existe el plugin Kotlin Notebook para IntelliJ para desarrolladores de Kotlin
Conclusión
- Con las herramientas adecuadas, Java puede ser una opción muy efectiva para resolver tareas pequeñas
- JBang facilita la escritura de scripts que usan bibliotecas de terceros
- Java también tiene potencial en la programación exploratoria, pero su soporte de herramientas aún necesita mejorar
2 comentarios
Para usarlo como scripting simple, los lenguajes con tipado dinámico son muchísimo más cómodos...
Claro, una vez que se sale del prototipo, usaría un lenguaje estático.
Comentarios en Hacker News
Encontró una forma de ejecutar un programa "Hello World" de manera sencilla. Se volvió mucho más simple que el código complejo de antes.
varyrecordson especialmente útiles.java myfile.java, y le resulta útil la función de importar automáticamentejava.base.Usa Java, JavaScript y TypeScript, pero para scripting usa .NET y LINQPad. Gracias a LINQ, hacer scripts se vuelve fácil.
En la época del desarrollo de JDK 1.1, no había consenso sobre una suite de pruebas. Mark Reinhold rechazó pruebas al estilo JCK y escribió un arnés de prueba sencillo.
Los lenguajes evolucionan con el tiempo. Java ahora es rápido, y con la incorporación de genéricos y una inferencia de tipos simple, se redujo el código boilerplate.
PHP también es un lenguaje útil. Viene preinstalado en muchos sistemas *nix y tiene una biblioteca estándar útil para manejar archivos, JSON y solicitudes de red.
En Java 23, se importan automáticamente tres métodos de
java.io.IO. Es un tipo nuevo y puede usarse con la opción--enable-preview.Aprendió a programar en "Java de un solo archivo" en HackerRank, y le resulta útil para resolver problemas de programación en pizarra.
Si quieres saber el motivo del método main simplificado, vale la pena revisar JEP 495. Está previsto que se incluya en JDK 24.
Usa Java para todos los scripts o tareas de programación, y lo ha usado en la empresa durante más de 5 años. Le satisface la evolución continua de Java.