7 points par GN⁺ 2024-12-20 | 2 commentaires | Partager sur WhatsApp
  • Java est connu pour convenir aux projets de grande envergure et de longue durée, mais peut aussi être un excellent outil pour les petites tâches
  • La vérification statique des types et l’excellent support des outils constituent aussi de grands avantages pour les petites tâches
  • Les améliorations récentes du langage rendent Java encore plus utile

Exécuter sans compilation

  • Grâce à JEP 330 et JEP 458, il est possible d’exécuter directement des fichiers source Java :
    java RandomFiles.java 10 /home/cay/data  
    
  • Le code est compilé automatiquement à chaque exécution, ce qui est pratique pour le développement et les tests
  • Il est possible de le convertir en exécutable natif avec Graal, mais dans la plupart des cas la différence de performance est minime

Syntaxe concise : méthode main d’instance et classe implicite

  • JEP 477 : simplifie l’écriture de petits programmes et scripts
  • Suppression de la syntaxe auparavant lourde (public static void main) :
var someVariable = initialValue;  
String helper(int param) { ... }  
void main(String[] args) {  
    ...  
}  
  • Import automatique du module java.base, pour plus de confort
  • Les méthodes println, print, readln sont également importées automatiquement

Records et enums

  • Records : permettent de représenter des données structurées à la place des dictionnaires Python
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}  
  • Enums : une façon plus intuitive d’exprimer des types énumérés qu’en Python
enum Direction { NORTH, EAST, SOUTH, WEST };  

Fonctionnalités utiles du langage et des API

  • Utilisation de var : permet d’employer des variables sans déclaration explicite de type dans les scripts
  • static import : permet d’écrire des calculs mathématiques plus concis
import static java.lang.Math.*;  
var diagonal = sqrt(pow(width, 2) + pow(height, 2));  
  • Blocs de texte : améliorent la lisibilité en gardant code et données ensemble
  • Bibliothèques puissantes pour les chaînes de caractères, les expressions régulières, les collections, ainsi que la gestion des dates et heures
  • Lecture de fichier :
var content = Files.readString(Path.of(filename));  
  • Exécution de processus externes :
String run(String... cmd) throws Exception {  
    var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();  
    process.waitFor();  
    return new String(process.getInputStream().readAllBytes());  
}  

Gestion des dépendances et JBang

  • JBang : permet d’ajouter directement des dépendances Maven dans le fichier source
//DEPS org.eclipse.angus:jakarta.mail:2.0.3  
  • Il devient alors possible d’exécuter ceci :
jbang MailMerge.java  
  • Transformer un script en exécutable :
///usr/bin/env jbang "$0" "$@" ; exit $?  

Environnement notebook

Avantages des notebooks

  • Programmation exploratoire : adaptée à la manipulation de données et à l’exécution de code ponctuel ou de petite taille
  • Structure en cellules de code et de texte :
    • Les résultats des cellules de code peuvent s’afficher sous forme de texte, tableaux, images, audio ou vidéo
    • Il est possible de répéter les essais et erreurs jusqu’à obtenir le résultat souhaité, puis d’ajouter des commentaires
  • Supérieur à JShell :
    • Le travail par cellule est plus simple
    • Les tableaux de données et graphiques peuvent être consultés visuellement
    • L’enregistrement et le partage sont faciles

Jupyter et les notebooks Java

  • Notebooks Jupyter : outil largement utilisé par les data scientists Python
    • Peuvent s’exécuter en local ou dans le cloud (par ex. Google Colab)
  • La technologie Jupyter est indépendante du langage :
    • Il est possible d’installer des kernels pour divers langages (par ex. IJava, JJava, Ganymede, Rapaio)
    • Jupyter Java Anywhere : simplifie l’installation d’un kernel Java en s’appuyant sur JBang
  • Limites :
    • La gestion des dépendances et l’affichage des résultats non textuels diffèrent selon les kernels
    • Le kernel IJava présente quelques problèmes de résolution des dépendances
    • Oracle ou les principaux fournisseurs devraient proposer un service type Colab dédié à Java

Traitement de données et visualisation en Java

  • Python facilite le traitement des données grâce à des bibliothèques comme NumPy et Matplotlib
    • Java ne dispose pas encore d’un écosystème équivalent aussi riche
  • tablesaw :
    • Peut servir d’alternative à NumPy
    • Prend en charge la visualisation via le package JavaScript Plot.ly

Projet JTaccuino

  • JTaccuino :
    • notebook Java en cours de développement par Sven Reimers
    • fournit une interface conviviale basée sur JavaFX
    • utilise JShell comme backend
    • en est à ses débuts, mais son potentiel d’évolution est élevé

Notebook Kotlin

  • Le plugin IntelliJ Kotlin Notebook est disponible pour les développeurs Kotlin

Conclusion

  • Avec les bons outils, Java peut être un choix très efficace pour traiter de petites tâches
  • JBang facilite l’écriture de scripts utilisant des bibliothèques tierces
  • Java a aussi du potentiel pour la programmation exploratoire, mais le support outillage doit encore s’améliorer

2 commentaires

 
aer0700 2024-12-24

Pour du scripting simple, les langages à typage dynamique sont tellement plus pratiques...
Bien sûr, dès qu’on sort du prototype, j’utiliserais plutôt un langage statique.

 
GN⁺ 2024-12-20
Avis Hacker News
  • A découvert une manière d’exécuter très simplement un programme « Hello World ». C’est devenu bien plus simple qu’avec le code complexe d’autrefois.

    • En utilisant Java 21, il a trouvé le code moins complexe. var et record sont particulièrement utiles.
    • Il résout les problèmes de l’AoC avec la méthode java myfile.java, et la fonctionnalité qui importe automatiquement java.base est pratique.
  • Il utilise Java, JavaScript et TypeScript, mais pour le scripting il utilise .NET et LINQPad. Grâce à LINQ, le scripting est plus facile.

    • Il respecte Python, mais le trouve difficile à lire. Il n’est pas à l’aise avec la syntaxe de PHP et de Python.
  • À l’époque du développement de JDK 1.1, il n’y avait pas de consensus sur une suite de tests. Mark Reinhold a refusé des tests sous forme de JCK et a écrit un harnais de test simple.

    • La fonctionnalité la plus utile pour les programmeurs Java est le hot reload du débogueur. Écrire du code devient beaucoup plus simple.
  • Les langages évoluent avec le temps. Java est désormais rapide, et l’ajout des génériques ainsi que d’une inférence de type simple a réduit le code boilerplate.

  • PHP est aussi un langage utile. Il est préinstallé sur de nombreux systèmes *nix et dispose d’une bibliothèque standard pratique pour gérer les fichiers, le JSON et les requêtes réseau.

  • En Java 23, trois méthodes de java.io.IO sont importées automatiquement. Il s’agit d’un nouveau type, utilisable avec l’option --enable-preview.

  • Il a appris le « Java en fichier unique » sur Hacker Rank, et cela lui est utile pour résoudre des problèmes de code sur tableau blanc.

  • Si vous voulez comprendre la raison d’une méthode main simplifiée, JEP 495 mérite le détour. Son intégration est prévue dans le JDK 24.

  • Il utilise Java pour tous ses scripts et tâches de code, et l’utilise en entreprise depuis plus de 5 ans. Il est satisfait de l’évolution continue de Java.