7 puntos por GN⁺ 2024-12-20 | 2 comentarios | Compartir por WhatsApp
  • 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

  • Gracias a JEP 330 y JEP 458, es posible ejecutar archivos fuente de Java directamente:
    java RandomFiles.java 10 /home/cay/data  
    
  • Se compila automáticamente cada vez que se ejecuta, lo que resulta útil para desarrollo y pruebas
  • Se puede convertir en un ejecutable nativo con Graal, pero en la mayoría de los casos la diferencia de rendimiento es mínima

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

 
aer0700 2024-12-24

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.

 
GN⁺ 2024-12-20
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.

    • Al usar Java 21, sintió que el código se volvió menos complejo. var y record son especialmente útiles.
    • Está resolviendo problemas de AoC con el enfoque java myfile.java, y le resulta útil la función de importar automáticamente java.base.
  • Usa Java, JavaScript y TypeScript, pero para scripting usa .NET y LINQPad. Gracias a LINQ, hacer scripts se vuelve fácil.

    • Respeta Python, pero le cuesta leerlo. No está familiarizado con la sintaxis de PHP y Python.
  • 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.

    • La función más útil para un programador de Java es la recarga en caliente del depurador. Hace que escribir código sea mucho más fácil.
  • 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.