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
19k
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の概要 / LLM for programmers
kishida
2
200
Javaの現状2024夏 / Java current status 2024 summer
kishida
4
1.4k
Java 22 Overview
kishida
1
260
Is Object-Oriented nessesary?
kishida
0
67
オブジェクト指向は必要なのか / Is object-oriented needed?
kishida
33
23k
AI時代を乗り切る実装力をつけよう / Get avility of implementation beyond AI era
kishida
2
5.2k
AI時代を生き抜くために処理をちゃんと書けるようになろう / write a executable process for AI era
kishida
24
14k
動くコードを書こう / let's code a process
kishida
25
7.4k
Java 21の概要 / outline of Java 21
kishida
10
6.3k
Other Decks in Programming
See All in Programming
Google's Recipe for Scaling (Web) Security – LocoMocoSec 2024
lweichselbaum
0
170
APIのない大学ログインWebサービスをWKWebViewとJavaScriptでアプリ化した話
akidon0000
1
330
Exploring the Gradually Lost Technical Skills in the Cloud Native Era
hwchiu
2
3.9k
日付と正規化
megmogmog1965
0
140
유연한 Composable 설계
l2hyunwoo
0
380
DMMプラットフォームにおけるTiDBの導入から運用まで
pospome
7
3k
Cloudflare Workers x AWS Lambdaの組み合わせユースケース / Cloudflare Workers x AWS Lambda Combination Use Case
seike460
PRO
2
310
AWS初心者ってどうやってAWSを学ぶ?〜アプリエンジニアがやってよかったアーキテクチャ学習方法〜
yamanashi_ren01
0
190
Findy - エンジニア向け会社紹介 / Findy Letter for Engineers
findyinc
2
81k
TiDB Serverless ~理想のServerless DBを考える~
soso_15315
1
160
Clean Architecture by TypeScript & NestJS
ryounasso
0
150
Async Await: Mastering Python's Time-Bending Tricks - EuroPython2024
yanbo
1
290
Featured
See All Featured
What's in a price? How to price your products and services
michaelherold
239
11k
Adopting Sorbet at Scale
ufuk
71
8.8k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
17
8.7k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
129
32k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
224
21k
What’s in a name? Adding method to the madness
productmarketing
PRO
21
2.9k
YesSQL, Process and Tooling at Scale
rocio
166
14k
Fashionably flexible responsive web design (full day workshop)
malarkey
399
65k
Ruby is Unlike a Banana
tanoku
96
10k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
26
2.1k
Learning to Love Humans: Emotional Interface Design
aarron
269
39k
Building Applications with DynamoDB
mza
89
5.8k
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 •