- 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
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
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.
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.
varundrecordsind besonders nützlich.java myfile.java, und die Funktion,java.baseautomatisch zu importieren, ist hilfreich.Ich nutze Java, JavaScript und TypeScript, verwende für Skripting aber .NET und LINQPad. Dank LINQ ist Skripting einfach.
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.
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.IOautomatisch importiert. Das ist ein neuer Typ, der mit der Option--enable-previewverwendet 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.