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
14
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
AI時代のプログラミング教育 / programming education in ai era
kishida
23
20k
Java Webフレームワークの現状 / java web framework at burikaigi
kishida
10
2.4k
AI時代に求められるプログラマの能力 / ability of programmer in AI era
kishida
17
12k
Java 23の概要とJava Web Frameworkの現状 / Java 23 and Java web framework
kishida
2
500
Java Webフレームワークの現状 / java web framework
kishida
10
11k
Is Object Oriented nesessary? COSCUP 2024
kishida
0
180
プログラムに組み込みたい人向けLLMの概要 / LLM for programmers
kishida
3
640
Javaの現状2024夏 / Java current status 2024 summer
kishida
6
2k
Java 22 Overview
kishida
1
370
Other Decks in Programming
See All in Programming
Fluent UI Blazor 5 (alpha)の紹介
tomokusaba
0
140
ローコードサービスの進化のためのモノレポ移行
taro28
1
330
体得しよう!RSA暗号の原理と解読
laysakura
3
530
Firebase Dynamic Linksの代替手段を自作する / Create your own Firebase Dynamic Links alternative
kubode
0
180
Preact、HooksとSignalsの両立 / Preact: Harmonizing Hooks and Signals
ssssota
1
700
今から始めるCursor / Windsurf / Cline
kengo_hayano
0
110
CRE Meetup!ユーザー信頼性を支えるエンジニアリング実践例の発表資料です
tmnb
0
350
生成AIの使いどころ
kanayannet
0
100
マルチアカウント環境での、そこまでがんばらない RI/SP 運用設計
wa6sn
0
590
フロントエンドテストの育て方
quramy
9
2.5k
読もう! Android build ドキュメント
andpad
1
240
AtCoder Heuristic First-step Vol.1 講義スライド(山登り法・焼きなまし法編)
takumi152
3
980
Featured
See All Featured
Why Our Code Smells
bkeepers
PRO
336
57k
RailsConf 2023
tenderlove
29
1k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
Music & Morning Musume
bryan
46
6.4k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
4
500
Done Done
chrislema
183
16k
Designing for Performance
lara
606
69k
Build your cross-platform service in a week with App Engine
jlugia
229
18k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Keith and Marios Guide to Fast Websites
keithpitt
411
22k
Testing 201, or: Great Expectations
jmmastey
42
7.4k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
2.9k
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 •