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
720
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
680
ECS の IPv6 がムズカシイ
eterny13
0
2.8k
固定回線にNAT64/DNS64を導入して
eterny13
0
290
Featured
See All Featured
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
254
22k
Embracing the Ebb and Flow
colly
88
5.1k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
Building an army of robots
kneath
306
46k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Mobile First: as difficult as doing things right
swwweet
225
10k
Why Our Code Smells
bkeepers
PRO
340
58k
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で関数型プログラミングやりたい人は 使ってみてください!