Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Javaは今どうなっているの? / how about java now
Search
Naoki Kishida
January 07, 2024
Programming
15
20k
Javaは今どうなっているの? / how about java now
2024年1月7日に行われたFukuoka Engineers Dayでの登壇資料です。
Naoki Kishida
January 07, 2024
Tweet
Share
More Decks by Naoki Kishida
See All by Naoki Kishida
LLMベースAIの基本 / basics of LLM based AI
kishida
10
2.8k
Java 24まとめ / Java 24 summary
kishida
3
560
AI時代のプログラミング教育 / programming education in ai era
kishida
25
24k
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
10
2.5k
AI時代に求められるプログラマの能力 / ability of programmer in AI era
kishida
19
12k
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
520
Java Webフレームワークの現状 / java web framework
kishida
10
11k
Is Object Oriented nesessary? COSCUP 2024
kishida
0
190
プログラムに組み込みたい人向けLLMの概要 / LLM for programmers
kishida
3
720
Other Decks in Programming
See All in Programming
Feature Flag 自動お掃除のための TypeScript プログラム変換
azrsh
PRO
4
540
Proxmoxをまとめて管理できるコンソール作ってみました
karugamo
1
370
私のRubyKaigi 2025 Kaigi Effect / My RubyKaigi 2025 Kaigi Effect
chobishiba
1
200
CRUD から CQRS へ ~ 分離が可能にする柔軟性
tkawae
0
200
「MCPを使ってる人」が より詳しくなるための解説
yamaguchidesu
0
290
Efficiency and Rock 'n’ Roll (Really!)
hollycummins
0
520
AIにコードを生成するコードを作らせて、再現性を担保しよう! / Let AI generate code to ensure reproducibility
yamachu
7
5.6k
JVM の仕組みを理解して PHP で実装してみよう
m3m0r7
PRO
1
230
TypeScript を活かしてデザインシステム MCP を作る / #tskaigi_after_night
izumin5210
4
420
AIコーディングの本質は“コード“ではなく“構造“だった / The essence of AI coding is not “code” but "structure
seike460
PRO
2
680
OpenTelemetry + LLM = OpenLLMetry!?
yunosukey
2
260
❄️ tmux-nixの実装を通して学ぶNixOSモジュール
momeemt
1
110
Featured
See All Featured
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
48
5.4k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
30
2.1k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
1
56
Large-scale JavaScript Application Architecture
addyosmani
512
110k
Code Review Best Practice
trishagee
68
18k
Navigating Team Friction
lara
185
15k
The Cost Of JavaScript in 2023
addyosmani
49
7.9k
Producing Creativity
orderedlist
PRO
345
40k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
Java REST API Framework Comparison - PWX 2021
mraible
31
8.6k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
Writing Fast Ruby
sferik
628
61k
Transcript
Javaは今どうなってるの? 2024-01-07 Fukuoka Engineers Day Javaコミュ@福岡 きしだ なおき
2024/01/07 2 自己紹介 • きしだ なおき • LINEヤフー • twitter:
@kis • 「プロになるJava」という Java入門書を書いてます
2024/01/07 3 Javaは今どうなってるの? • より学習しやすく • スレッドモデルの改善 • オブジェクト指向からデータ指向へ
より学習しやすく • Pythonに入門者が奪われてやばい • javac不要で実行できる • パブリックスタティックヴォイドメインからの脱却
javac不要で実行できる • java sample.java で実行可能 • javacを使うときに困ること • javacではファイル名を指定、javaではパッケージ含むクラス名を指定 •
パッケージについて理解が必要 • パッケージ名と同じフォルダにソースがない場合、コンパイルはできるけど実 行はできない • ファイル名とクラス名をあわせる必要がある • 大文字小文字ではまりがち • ちょっと実行したいときにsample.classができるのも邪魔
パブリックスタティックヴォイドメインからの脱却 • パブリックスタティックヴォイドメインの問題 • おまじないがいっぱいある • publicやstaticは相対的なので最初の段階では説明できない • mainから呼び出すメソッドを定義するときには必要になるのでモヤモヤしつ づけることに
• Stringや[]はがんばれば説明できるけど、まだそのときではない • クラスもいらない • 単にコード置き場に なっている public class Sample { public static void main(String[] args) { System.out.println(“Hello world!”); } }
void mainでいける • void main()でいける • void mainを消すためにはmain以外にも影響のある変更が必要 • まだ試用機能
• Java 23くらい?(9月リリース) • System.outもそのうち消せるかも void main() { System.out.println(“Hello world!”); }
スレッドモデルの改善 • グリーンスレッドの復活 • 構造化並列
グリーンスレッドの復活 • Java1.0ではグリーンスレッドだった • 当時は単一CPU、シングルコアしかなかった • GUIのバックグラウンド処理のためが主な目的 • Java1.1でOSスレッドに対応 •
複数CPUが増え始めた。その後マルチコアが当然に • 複数プロセッサで高負荷処理 • Java 21でグリーンスレッドが「仮想スレッド」として導入 • マルチスレッドの目的が通信時に別の処理をしたいだけが多い グリーンスレッド アプリケーションで管理 軽い 複数コアを使えない OSスレッド OSで管理 重い 複数コアを使える
構造化並列 • サブタスクを2つ別スレッドで呼び出すときの問題 • 片方でエラーが出たとき、もう片方がそのまま処理を続けてしまう • 親スレッドが中断したとき、サブタスクだけ生き残ってしまう
オブジェクト指向からデータ指向へ • オブジェクト指向 • オブジェクト指向はモジュール化技術 • モジュール化はすでに行われてる • ブラウザ-サーバー •
マイクロサービス • サーバレス • プログラムをさらにモジュール化する必要がない • データ指向 • データをデータ(not オブジェクト)として扱う • データの性質を型として定義する
データの性質を型として定義する • 抽象データ型 • 代数データ型 • ポリモーフィズムではなく条件分岐
抽象データ型 • 型の定義の指針 • データの操作だけ公開することで変更に強く柔軟な型を定義 • データ特化のカプセル化 • 操作としてデータ操作だけを含む •
レコード型の導入 • 継承は不可 • interfaceの実装は可 record User(long id, String name) {}
代数データ型 • 型の組み合わせの指針 • 代数的に型を扱う • 代数的=足し算と掛け算 • 直積型 •
直和型
直積型 • 値を組み合わせる型 • レコード、クラス、配列 • 値のとりうるパターンがそれぞれの値のとりうるパターンの積 • record A(boolean
a, byte b) {} • 2 x 256で512とおり
直和型 • いずれかの型になる • とりうるパターンは足し算になる • sealedの導入 sealed interface Op
{ record AddOp(int a, int b) implements Op {} record SubOp(int a, int b) implements Op {} }
ポリモーフィズムではなく条件分岐 • switchの改善 • パターンマッチング
ポリモーフィズムではなく条件分岐 • ロジックを正しく書くには、ロジックが一箇所にまとまっている ほうが便利 • ポリモーフィズムではロジックがクラス別に散らばる • そのロジックにかかわるすべての処理の把握が難しい • しらんところで継承されて把握できない処理がまぎれこむこともある
• sealedで対処可能 • 継承に依存したポリモーフィズムでは対応できないことも多い
switchの改善 • breakとか不要に switch(value) { case 1 -> println(“One”); case
2 -> println(“Two”); }
パターンマッチング • 型ごとの処理 • 構造の分解 int calc(Op op) { return
switch(op) { case AddOp(int a, int b) -> a + b; case SubOp(int a, int b) -> a – b; } }
詳しくはJavaコミュ@福岡の勉強会で • Java22が2024/3/19にリリースされるのでその前後でやります • javaq.connpass.com •