7 Punkte von GN⁺ 2024-12-20 | 2 Kommentare | Auf WhatsApp teilen
  • Java ist zwar als geeignet für große, langfristige Projekte bekannt, kann aber auch für kleine Aufgaben ein hervorragendes Werkzeug sein
  • Statische Typprüfung und hervorragende Tool-Unterstützung sind auch bei kleinen Aufgaben große Vorteile
  • Aktuelle Sprachverbesserungen machen Java noch nützlicher

Ohne Kompilierung ausführen

  • Dank JEP 330 und JEP 458 lassen sich Java-Quelldateien direkt ausführen:
    java RandomFiles.java 10 /home/cay/data  
    
  • Bei jedem Ausführen wird automatisch kompiliert, was für Entwicklung und Tests nützlich ist
  • Mit Graal lässt sich daraus eine native ausführbare Datei erzeugen, in den meisten Fällen ist der Leistungsunterschied jedoch gering

Knappere Syntax: Instanz-main-Methode und implizite Klassen

  • JEP 477: vereinfacht das Schreiben kleiner Programme und Skripte
  • Die bisher umständliche Syntax (public static void main) entfällt:
var someVariable = initialValue;  
String helper(int param) { ... }  
void main(String[] args) {  
    ...  
}  
  • Das Modul java.base wird automatisch importiert, was die Nutzung bequemer macht
  • Auch die Methoden println, print und readln werden automatisch importiert

Records und Enums

  • Records: strukturierte Datendarstellung statt Python-Dictionaries
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}  
  • Enums: intuitivere Darstellung von Aufzählungen als in Python
enum Direction { NORTH, EAST, SOUTH, WEST };  

Nützliche Sprach- und API-Funktionen

  • Einsatz von var: Variablen lassen sich in Skripten ohne Typdeklaration verwenden
  • static import: ermöglicht kompakte mathematische Berechnungen
import static java.lang.Math.*;  
var diagonal = sqrt(pow(width, 2) + pow(height, 2));  
  • Textblöcke: halten Code und Daten zusammen und verbessern die Lesbarkeit
  • Leistungsfähige Bibliotheken für Strings, reguläre Ausdrücke, Collections sowie Datum und Uhrzeit
  • Datei einlesen:
var content = Files.readString(Path.of(filename));  
  • Externe Prozesse ausführen:
String run(String... cmd) throws Exception {  
    var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();  
    process.waitFor();  
    return new String(process.getInputStream().readAllBytes());  
}  

Abhängigkeiten verwalten und JBang

  • JBang: Maven-Abhängigkeiten lassen sich direkt in der Quelldatei hinzufügen
//DEPS org.eclipse.angus:jakarta.mail:2.0.3  
  • Dann lässt sich das so ausführen
jbang MailMerge.java  
  • Skripte in ausführbare Dateien umwandeln:
///usr/bin/env jbang "$0" "$@" ; exit $?  

Notebook-Umgebung

Vorteile von Notebooks

  • Exploratives Programmieren: geeignet für die Arbeit mit Daten sowie für einmaligen oder kleinen Code
  • Aufbau aus Code- und Textzellen:
    • Die Ergebnisse von Codezellen können als Text, Tabelle, Bild, Audio oder Video angezeigt werden
    • Man kann Versuche und Fehlversuche wiederholen, bis das gewünschte Ergebnis erreicht ist, und danach Kommentare ergänzen
  • Besser als JShell:
    • Arbeiten auf Zellebene ist einfacher
    • Datentabellen und Diagramme lassen sich visuell prüfen
    • Speichern und Teilen ist unkompliziert

Jupyter und Java-Notebooks

  • Jupyter-Notebooks: ein bei Python-Data-Scientists weit verbreitetes Werkzeug
    • Lokal oder in der Cloud ausführbar, z. B. in Google Colab
  • Die Jupyter-Technik ist sprachunabhängig:
    • Verschiedene Sprach-Kernel können installiert werden (z. B. IJava, JJava, Ganymede, Rapaio)
    • Jupyter Java Anywhere: vereinfacht mit JBang die Installation eines Java-Kernels
  • Einschränkungen:
    • Je nach Kernel unterscheiden sich Abhängigkeitsverwaltung und Darstellung nicht-textueller Ergebnisse
    • Der IJava-Kernel hat einige Probleme bei der Auflösung von Abhängigkeiten
    • Oracle oder große Anbieter sollten einen Java-spezifischen Colab-Dienst bereitstellen

Datenverarbeitung und Visualisierung in Java

  • Python erleichtert die Datenverarbeitung mit Bibliotheken wie NumPy und Matplotlib
    • In Java fehlt bislang noch ein vergleichbares Ökosystem
  • tablesaw:
    • kann als Alternative zu NumPy genutzt werden
    • unterstützt Visualisierung mit dem JavaScript-Paket Plot.ly

Projekt JTaccuino

  • JTaccuino:
    • ein von Sven Reimers entwickeltes Java-Notebook
    • bietet eine benutzerfreundliche UI auf Basis von JavaFX
    • verwendet JShell als Backend
    • befindet sich noch in einer frühen Phase, hat aber viel Potenzial

Kotlin-Notebook

  • Für Kotlin-Entwickler gibt es das Kotlin Notebook IntelliJ Plugin

Fazit

  • Mit den richtigen Werkzeugen ist Java eine sehr effektive Wahl für kleine Aufgaben
  • JBang erleichtert das Schreiben von Skripten mit Bibliotheken von Drittanbietern
  • Java hat auch für exploratives Programmieren Potenzial, benötigt aber bessere Tool-Unterstützung

2 Kommentare

 
aer0700 2024-12-24

Für einfache Scripting-Zwecke sind Sprachen mit dynamischer Typisierung einfach unglaublich bequem...
Natürlich würde ich, sobald es über den Prototyp hinausgeht, eine statische Sprache verwenden.

 
GN⁺ 2024-12-20
Hacker-News-Kommentare
  • Ich habe eine Möglichkeit entdeckt, ein "Hello World"-Programm ganz einfach auszuführen. Es ist viel einfacher geworden als der bisherige komplexe Code.

    • Seit ich Java 21 nutze, fühlt sich der Code weniger komplex an. var und record sind besonders nützlich.
    • Ich löse AoC-Probleme mit der Methode java myfile.java, und die Funktion, java.base automatisch zu importieren, ist hilfreich.
  • Ich nutze Java, JavaScript und TypeScript, verwende für Skripting aber .NET und LINQPad. Dank LINQ ist Skripting einfach.

    • Ich respektiere Python, finde es aber schwer zu lesen. Mit der Syntax von PHP und Python bin ich nicht vertraut.
  • Als JDK 1.1 entwickelt wurde, gab es keinen Konsens über eine Test-Suite. Mark Reinhold lehnte Tests in Form des JCK ab und schrieb ein einfaches Test-Harness.

    • Die nützlichste Funktion für Java-Programmierer ist Hot Reload im Debugger. Dadurch wird das Schreiben von Code viel einfacher.
  • Sprachen entwickeln sich mit der Zeit weiter. Java ist inzwischen schnell, und durch Generics sowie einfache Typinferenz wurde Boilerplate-Code reduziert.

  • PHP ist ebenfalls eine nützliche Sprache. Sie ist auf vielen *nix-Systemen vorinstalliert und verfügt über eine nützliche Standardbibliothek für Dateien, JSON und die Verarbeitung von Netzwerkanfragen.

  • In Java 23 werden drei Methoden von java.io.IO automatisch importiert. Das ist ein neuer Typ, der mit der Option --enable-preview verwendet werden kann.

  • Ich habe bei HackerRank gelernt, in "Single-File Java" zu programmieren, und das ist nützlich, um Whiteboard-Coding-Aufgaben zu lösen.

  • Wenn man wissen will, warum es eine vereinfachte Main-Methode gibt, lohnt sich ein Blick auf JEP 495. Es soll in JDK 24 enthalten sein.

  • Ich nutze Java für alle Coding-Skripte und Aufgaben und verwende es seit mehr als fünf Jahren im Unternehmen. Ich bin zufrieden mit der kontinuierlichen Weiterentwicklung von Java.