2023-04-26 Java on Azure Day 2023
Javaは今どこに向かっているのか櫻庭 祐一
View Slide
OpenJDK JDK ProjectProject AmberJava によるデータ指向プログラミングの主要な新機能Java 17 21から
Java 17 21から の主要な新機能OpenJDK JDK Project
OpenJDK JDK Projecthttps://openjdk.org/projects/jdk/のサブプロジェクトJDK Project: OpenJDKJDK 21 2023-09-19JDK 20 2023-03-21半年ごとのリリースJDK他のサブプロジェクトをまとめて を開発Oracle Java 21は から 2 年周期LTS Oracleは などのディストリビュータによるNote: OpenJDK LTS LTSには と非 の区別はない
JEP: JDK Enhancement Proposalの機能を規定JDK新機能だけでなく、実装改善、機能の削除も含むPreviewStandard 正式な機能の種類JEPIncubatorExperimentalプレビュー機能実験的な機能新しいモジュールex. Recordsex. HTTP Clientex. ZGCNote: Preview, Experimental, Incubator は最低 2 回
JEP: JDK Enhancement ProposalJava 18400: UTF-8 by Default408: Simple Web Server413: Code Snippets in Java API Documentation416: Reimplement Core Re ection with Method Handles417: Vector API (Third Incubator)418: Internet-Address Resolution SPI419: Foreign Function & Memory API (Second Incubator)420: Pattern Matching for switch (Second Preview)421: Deprecate Finalization for RemovalJava 19405: Record Patterns (Preview)422: Linux/RISC-V Port424: Foreign Function & Memory API (Preview)425: Virtual Threads (Preview)426: Vector API (Fourth Incubator)427: Pattern Matching for switch (Third Preview)428: Structured Concurrency (Incubator)Java 20429: Scoped Values (Incubator)432: Record Patterns (Second Preview)433: Pattern Matching for switch (Fourth Preview)434: Foreign Function & Memory API (Second Preview)436: Virtual Threads (Second Preview)437: Structured Concurrency (Second Incubator)438: Vector API (Fifth Incubator)Java 21430: String Templates (Preview)431: Sequenced Collections442: Foreign Function & Memory API (Third Preview)444: Virtual Threads. . .
JEP 400: UTF-8 by defaultデフォルトファイルエンコーディングを に統一UTF-8java.ioInputStreamReader, FileReader, OutputStreamWriter, FileWriter, PrintStreamjava.utilFormatter, Scannerjava.netURLEncoder, URLDecoder影響をうけるクラスでデフォルトエンコーディングで を使用している場合、要注意Windows Windows-31J-D le.encoding =COMPAT従来通りのファイルエンコーディングを使用するには起動オプション
JEP 431: Sequenced Collections最初と最後の要素にアクセスできるインタフェースSequencedCollectionSequencedSetSequencedMap
JEP 444: Virtual Threadsby Project Loomが管理する軽量スレッドJVM待ち時間を活用することでスループット向上I/Oアプリケーションなど通信を多用するシステムに効果的Web使い方は従来の とほぼ同じThreadへの対応Virtual Treadsなども対応予定Spring FrameworkHelidon NimaOracle JDBC Driver
Javaによるデータ指向プログラミングProject Amber
Project Amber言語仕様の改良と拡張を行うプロジェクト286: Local-Variable Type Inference (var) (10)323: Local-Variable Syntax for Lambda Parameters (11)361: Switch Expressions (14)378: Text Blocks (15)394: Pattern Matching for instanceof (16)395: Records (16)409: Sealed Classes (17)仕様策定完了仕様策定中430: String Templates (Preview)440: Record Patterns441: Pattern Matching for switch443: Unnamed Patterns and Variables (Preview)445: Flexible Main Methods and Anonymous Main Classes (Preview)447: Statements before super()
Project Amber型395: Records409: Sealed Classes447: Statements before super()361: Switch Expressions394: Pattern Matching for instanceof440: Record Patterns441: Pattern Matching for switch443: Unnamed Patterns and Variables (Preview)パターンマッチング286: Local-Variable Type Inference (var)323: Local-Variable Syntax for Lambda Parameters378: Text Blocks430: String Templates (Preview)445: Flexible Main Methods and Anonymous Main Classes (Preview)その他
Recordsイミュータブルなデータを表す専用のクラス例 座標を表すクラス Boilerplate
Recordsイミュータブルなデータを表す専用のクラス例 座標を表すクラス
Recordsイミュータブルなデータを表す専用のクラス例 座標を表すクラスクラスnalインタフェースは実装できるが、他のクラスから継承はできないメソッドの追加も可能
Sealed Class継承を制限したクラス例 図形を表すクラス
Sealed Class継承を制限したクラス例 図形を表すクラスで定義sealed permitsでサブクラスを制限サブクラスは同モジュールもしくは同パッケージサブクラスは以下のいずれかで定義nalsealednon-sealed使用時switch default句を省略できる
Switch Expression文からswitch 式へswitch
Switch Expression文からswitch 式へswitch矢印で記述
Switch Expression文からswitch 式へswitch処理が 1 行であればカッコ省略可
Switch Expression文からswitch 式へswitchであればdefaultenum, selaed class 句省略可
Switch Expression文からswitch 式へswitch式 値が返せるswitch
Switch Expression文からswitch 式へswitch処理をカッコでくくる時はで値を返すyield
Pattern Matchingパターンマッチング 入力に対し特定のパターンと照合すること適合した場合、その要素を取りだすことパターンとして型を使用JEP 394, 440, 441
Pattern Matching
Pattern MatchingBoilerplate!
Data Oriented Programmingドメインモデルの実装では ...データ業務ルール
Data Oriented Programmingドメインモデルの実装では ...データ業務ルールデータ指向プログラミングの原則 #1 は、コードをデータから切り離すことである“データ指向プログラミング” より引用
Data Oriented Programmingドメインモデルの実装では ...データ業務ルールリソース値オブジェクトイベント...ステートレスな処理型として表現するモジュールとして表現する( 型として扱う必要はない )イミュータブルであることが重要
映画のチケットで考えてみる映画のチケットは席の種類と、チケットの区分によって値段が異なるとする席はプレミア席と一般席チケットの区分は一般、学生、シニアの 3 種類
映画のチケットで考えてみる料金を計算する
映画のチケットで考えてみる式で記述switch
映画のチケットで考えてみるのパターンマッチングを利用Recordのパターンマッチングを利用Record
映画のチケットで考えてみるをさらに分解Record
映画のチケットで考えてみるをさらに分解Record 式で処理を分けるよりswitchテンプレートメソッドパターンで記述すればいいのでは?業務ルールが複数のクラスに分散してしまい、見通しが悪くなるデータ間の関係 ( 関連、コンポジッション ) と処理間の関係 ( 使用 ) が混在しまい、複雑になりがち業務ルールは処理によって必要とするデータも変化する
DOP OOP適材適所: DOPドメインモデル: OOPバウンダリーバウンダリーのフレームワークに則った記述
Conclusion月リリース予定Java 21 LTS 9Virtual Threads などが導入予定パターンマッチングなどデータ指向プログラミングに向けた機能Project AmberJava 21 String Templateがパターンマッチングはさらに拡張される予定で Preview