7 ポイント 投稿者 GN⁺ 2024-12-20 | 2件のコメント | WhatsAppで共有
  • Javaは大規模で長期的なプロジェクトに適していることで知られているが、小さな作業にも優れたツールになり得る
  • 静的型チェック優れたツール支援は、小さな作業でも大きな利点として機能する
  • 近年の言語改善により、Javaはさらに有用になっている

コンパイルせずに実行する

  • JEP 330JEP 458により、Javaソースファイルを直接実行できる:
    java RandomFiles.java 10 /home/cay/data  
    
  • 実行のたびに自動でコンパイルされるため、開発やテストに便利
  • Graalを使ってネイティブ実行ファイルに変換できるが、ほとんどの場合、性能差はわずか

簡潔な文法: インスタンスmainメソッドと暗黙クラス

  • JEP 477: 小さなプログラムやスクリプト作成を簡素化
  • 従来の煩雑な構文(public static void main)を排除:
var someVariable = initialValue;  
String helper(int param) { ... }  
void main(String[] args) {  
    ...  
}  
  • java.baseモジュールが自動インポートされ、利便性が向上
  • printlnprintreadlnメソッドも自動インポート

RecordsとEnums

  • Records: Pythonの辞書の代わりに構造化データを表現
record Window(int id, int desktop, int x, int y, int width, int height, String title) {}  
  • Enums: Pythonより直感的な列挙型表現
enum Direction { NORTH, EAST, SOUTH, WEST };  

便利な言語機能とAPI

  • varの活用: スクリプトで型宣言なしに変数を使える
  • static import: 簡潔な数学計算が可能
import static java.lang.Math.*;  
var diagonal = sqrt(pow(width, 2) + pow(height, 2));  
  • テキストブロック: コードとデータを一緒に保ちながら可読性を改善
  • 強力な文字列、正規表現、コレクション、日付/時刻ライブラリ
  • ファイルの読み込み:
var content = Files.readString(Path.of(filename));  
  • 外部プロセスの実行:
String run(String... cmd) throws Exception {  
    var process = new ProcessBuilder(cmd).redirectErrorStream(true).start();  
    process.waitFor();  
    return new String(process.getInputStream().readAllBytes());  
}  

依存関係の処理とJBang

  • JBang: Maven依存関係をソースファイルに直接追加できる
//DEPS org.eclipse.angus:jakarta.mail:2.0.3  
  • すると次のように実行できる
jbang MailMerge.java  
  • スクリプトを実行ファイルに変換:
///usr/bin/env jbang "$0" "$@" ; exit $?  

ノートブック環境

ノートブックの利点

  • 探索的プログラミング: データを扱いながら、一回限りまたは小規模なコード実行に適している
  • コードセルとテキストセルの構成:
    • コードセルの実行結果はテキスト、テーブル、画像、音声、または動画として表示される
    • 試行錯誤を繰り返し、望む結果を得た後で注釈を追加できる
  • JShellより優れている:
    • セル単位の作業がより簡単
    • データ表やグラフを視覚的に確認できる
    • 保存と共有が簡単

JupyterとJavaノートブック

  • Jupyterノートブック: Pythonのデータサイエンティストに広く使われているツール
    • ローカルまたはクラウド(例: Google Colab)で実行できる
  • Jupyter技術は言語非依存:
    • さまざまな言語カーネルをインストール可能(例: IJava、JJava、Ganymede、Rapaio)
    • Jupyter Java Anywhere: JBangを活用してJavaカーネルのインストールを簡素化
  • 限界点:
    • 各カーネルごとに依存関係の処理や非テキスト結果の表示方法が異なる
    • IJavaカーネルには依存関係解決にいくつかの問題がある
    • Oracleや主要ベンダーがJava専用のColabサービスを提供する必要がある

Javaのデータ処理と可視化

  • PythonはNumPyMatplotlibのようなライブラリでデータ処理がしやすい
    • Javaでは、同様のエコシステムはまだ不足している
  • tablesaw:
    • NumPyの代替として使える
    • Plot.ly JavaScriptパッケージを活用した可視化を支援

JTaccuinoプロジェクト

  • JTaccuino:
    • Sven Reimersが開発中のJavaノートブック
    • JavaFXベースのユーザーフレンドリーなUIを提供
    • バックエンドにJShellを使用
    • 初期段階だが発展の可能性が高い

Kotlinノートブック

  • Kotlin開発者向けにKotlin Notebook IntelliJプラグインが提供されている

結論

  • 適切なツールを活用すれば、Javaは小さな作業をこなすうえで非常に効果的な選択肢になる
  • JBangはサードパーティライブラリを使うスクリプト作成を容易にする
  • Javaは探索的プログラミングでも可能性を持つが、ツール支援の改善が必要

2件のコメント

 
aer0700 2024-12-24

簡単なスクリプティング用途で使うときは、動的型付けの言語のほうが圧倒的に楽なので……
もちろん、プロトタイプの段階を超えたら静的言語を使いますが。

 
GN⁺ 2024-12-20
Hacker Newsの意見
  • "Hello World" プログラムを簡単に実行できる方法を見つけた。従来の複雑なコードよりはるかにシンプルになった。

    • Java 21を使うようになってから、コードがそれほど複雑でなくなったと感じている。varrecord が特に便利だ。
    • java myfile.java 方式でAoCの問題を解いており、自動的に java.base がimportされる機能が便利だ。
  • Java、JavaScript、TypeScriptを使っているが、スクリプティングには .NET と LINQPad を使っている。LINQ のおかげでスクリプティングが簡単になる。

    • Python は尊敬しているが読みにくい。PHP と Python の文法にはなじみがない。
  • JDK 1.1 の開発当時、テストスイートに関する合意はなかった。Mark Reinhold は JCK 形式のテストを拒否し、簡単なテストハーネスを書いた。

    • Java プログラマにとって最も役立つ機能はデバッガのホットリロードだ。コードを書くのがずっと楽になる。
  • 言語は時とともに進化する。Java は今では高速で、ジェネリクスと簡単な型推論機能が追加され、ボイラープレートコードが減った。

  • PHP も有用な言語だ。多くの *nix システムにプリインストールされており、ファイル、JSON、ネットワークリクエストの処理に役立つ標準ライブラリがある。

  • Java 23 では java.io.IO の3つのメソッドが自動的にimportされる。これは新しい型で、--enable-preview オプションで使用できる。

  • Hacker Rank で「単一ファイル Java」コーディングを学び、ホワイトボードコーディングの問題を解くのに役立っている。

  • シンプルなメインメソッドの理由を知りたければ、JEP 495 を参照する価値がある。JDK 24 に含まれる予定だ。

  • あらゆるコーディングスクリプトや作業に Java を使っており、会社でも5年以上使ってきた。Java が継続的に進化していることに満足している。