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
Vavrのすすめ
Search
kawagoo
October 27, 2024
680
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Vavrのすすめ
kawagoo
October 27, 2024
More Decks by kawagoo
See All by kawagoo
docker-compose.yml から Helm Chartに 変換してくれるツール Katenary を試してみた
eterny13
0
660
ECS の IPv6 がムズカシイ
eterny13
0
2.8k
固定回線にNAT64/DNS64を導入して
eterny13
0
280
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
370
A better future with KSS
kneath
240
18k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
260
Scaling GitHub
holman
464
140k
Crafting Experiences
bethany
1
190
Producing Creativity
orderedlist
PRO
348
40k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
490
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
72
40k
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1.1k
Groundhog Day: Seeking Process in Gaming for Health
codingconduct
0
210
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
200
Transcript
1 @Copyright BIGLOBE inc. 2024. All rights reserved Vavrのすすめ ビッグローブ株式会社
川口永一郎
2 @Copyright BIGLOBE inc. 2024. All rights reserved Vavrとは? •
Javaの関数型プログラミングライブラリ ◦ https://vavr.io/ ◦ https://github.com/vavr-io/vavr ◦ JAVAをひっくり返すとVAVr • Java標準にないイミュータブルなデータ構造を利用できる • 所属しているチームでJavaを使用する際はマストで採用
3 @Copyright BIGLOBE inc. 2024. All rights reserved Vavrが用意しているデータ構造(一部) •
Tuple ◦ いくつかの値(異なる型でも良い)の組を保持する型 • Functions ◦ Function0〜Function8 といった標準にはない3引数以上のものが ある • Values ◦ 1つの型の値を0個以上持つようなオブジェクトを抽象化した インターフェース ▪ Option • ある型の値を持つか持たないかどちらかを表現できる ▪ Try • 例外を戻り値のように扱うことができる ▪ Either • 2つの型のうちどちらか一方だけを持つ型 • 2つの型は Left, Right と呼ばれ、成功時の値とエラー値を保持できる
4 @Copyright BIGLOBE inc. 2024. All rights reserved 例 files
= sftp.getFiles("test.csv"); // sftpでファイル取得 if (files.isEmpty()) { throw new RuntimeException("No file found"); } String csvContent; try { csvContent = CSVParser.parse(files.get(0)); // ファイルをCSVにパース } catch (IOException e) { throw new RuntimeException("CSV parse failed", e); } return new XXXReader(csvContent);
5 @Copyright BIGLOBE inc. 2024. All rights reserved 例 files
= sftp.getFiles("test.csv"); if (files.isEmpty()) { throw new RuntimeException("No file found"); } String csvContent; try { csvContent = CSVParser.parse(files.get(0)); } catch (IOException e) { throw new RuntimeException("CSV parse failed", e); } return new XXXReader(csvContent); return Try.of(() -> sftp.getFiles("test.csv") ) .filter( f -> !f.isEmpty(), f -> new RuntimeException("No file found") ) .mapTry( f -> CSVParser.parse(f.get(0)) ) .recoverWith( IOException.class, e -> Try.failure( new RuntimeException("CSV parse failed", e)) ) .map(XXXReader::new) .get();
6 @Copyright BIGLOBE inc. 2024. All rights reserved ちゃんとメンテされてるん? •
2021年7月に0.10.4がリリースされて以来、アップデートがなかったが、 今月0.10.5にアップデート ◦ 新しい maintainer に変わったとのこと
7 @Copyright BIGLOBE inc. 2024. All rights reserved Javaで関数型プログラミングやりたい人は 使ってみてください!