SlideShare a Scribd company logo
null使ったら負け東京版
null使ったら負け東京版
null書いたら負け
● Streamはコーディング規約で禁止でもいい
● Date and Timeはよくわからない
null使ったら負け東京版
null使ったら負け東京版
null使ったら負け東京版
Optionalとは
● java.util.Optional<T>
● ScalaでいうOption
● HaskellでいうMaybe
● 値をもつかもたないか
Optionalを用意する
● 値がある
Optional.of(str)
– nullを渡すとぬるぽ
● 値がない
Optional.empty()
● 値があるかどうかわからない
Optional.ofNullable(str)
値があるかどうか判定する
if(ostr.isPresent()){
System.out.println(ostr.get());
}
● isPresent
別の値に変換する
● map
Optional<String> ostr = Optional.of(str);
ostr.map(String::length)
.ifPresent(System.out::println);
モナド!
● nullのある世界とない世界の分離
nullを使っていいところ悪いところ
● ローカル変数 ○
● 引数 △
● フィールド ×
● 戻り値 ×
Java8のほかの作法
● Streamでの注意
● メソッド参照とラムダの使い分け
● 遅延実行をいかす
● Mapを活用する
● 制御構造を自作する
Streamでの注意
● 副作用に気をつける
副作用に気をつける
● 副作用を使う基準
– 中間操作 ×
– 終端操作
● reduce △
● forEach ○
遅延実行をいかす
● 値が使われる可能性の低い引数の構築に時間がか
かるとき
● Logger
● Optional
– Optional#orElseGet
– Optional#orElseThrow
logger.debug(bigObject.toString());
logger.fine(() -> bigObject.toString());
Mapを活用する
● Map<?, LIst<?>>
● メモ化
Map<?, List<?>>
● 追加
– Map#computeIfAbsent
● 削除
– Map#computeIfPresent
modifiedTuples.computeIfPresent(mt.oldtuple.rid,
(rid, list) -> {
list.remove(mt);
return list.isEmpty() ? null : list;
});
modifiedTuples.computeIfAbsent(mt.oldtuple.rid,
rid -> new LinkedList()).push(mt);
メモ化
● Map#computeIfAbsent
– 値があればその値、なければ計算を行って結果を
Mapに格納しつつ返す。
制御構造を自作する
● カスタムwith
● カスタム分岐
● カスタムループ
カスタムwith
● try-with-resource
public static void withTran(Transaction tx, Runnable proc){
try{
proc.run();
tx.commit();
}catch(Exception ex){
tx.rollback();
}
}
withTran(tx, () -> {
// Databaseアクセス!
});
カスタム分岐
● パターンマッチ
– 型安全なオブジェクトごとの操作と分解
http://d.hatena.ne.jp/nowokay/20131212#1386820115
カスタムループ
● forEach
● zip
zip
● ふたつのStreamをまとめる
Pairとzip
http://d.hatena.ne.jp/nowokay/20140321#1395371615
public static void main(String[] args) {
List<String> prefs = Arrays.asList("ほっかいどう", "ちば",
"とうきょう", "しが", "やまぐち",
"さが", "みやざき");
StreamUtils.zip(
IntStream.iterate(1, SUCC).boxed(),
prefs.stream().filter(s -> s.length() <= 2))
.forEach(p -> System.out.printf(
"%d:%s%n", p.left, p.right));
}
メソッド参照とラムダの使い分け
● メソッド参照は引数を隠す
● 読み解くのにコンテキスト理解が必要
– メソッドに渡すためのメソッド ○
– 引数ひとつのメソッド △
– 引数複数のメソッド ×
Java8の弱点
● 型推論が案外弱い
http://d.hatena.ne.jp/nowokay/20140107#1389093206

More Related Content

ODP
(define)なしで再帰関数を定義する
PPTX
IJPC2015 D問題解説
PPTX
JavaScript入門勉強会ー第四章
PDF
null使ったら負け福岡版
PDF
Lt8 JavaScriptで配列をコピーする
ODP
Real World OCamlを読んでLispと協調してみた
PDF
ICFP2009-いかにして我々は戦ったか
PDF
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ
(define)なしで再帰関数を定義する
IJPC2015 D問題解説
JavaScript入門勉強会ー第四章
null使ったら負け福岡版
Lt8 JavaScriptで配列をコピーする
Real World OCamlを読んでLispと協調してみた
ICFP2009-いかにして我々は戦ったか
Lispmeetup #53 PythonベースのLisp方言、 Hyのすすめ

Viewers also liked (11)

PDF
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
PDF
コンピューティングとJava~なにわTECH道
PDF
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
PDF
JavaOne2016報告
PPTX
乱数のたのしい話
PDF
職業人講和20141008
PDF
プログラマは何を勉強するか
PPTX
ぼくの実装した最弱のディープラーニング
PDF
デキるプログラマだけが知っているコードレビュー7つの秘訣
PDF
オブジェクト指向エクササイズのススメ
PDF
オブジェクト指向やめましょう
だれも教えてくれないJavaの世界。 あと、ぼくが会社員になったわけ。
コンピューティングとJava~なにわTECH道
これからのコンピューティングの変化とJava-JJUG CCC 2015 Fall
JavaOne2016報告
乱数のたのしい話
職業人講和20141008
プログラマは何を勉強するか
ぼくの実装した最弱のディープラーニング
デキるプログラマだけが知っているコードレビュー7つの秘訣
オブジェクト指向エクササイズのススメ
オブジェクト指向やめましょう
Ad

More from なおき きしだ (20)

PDF
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
PDF
GraalVM at Fukuoka LT
PDF
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
PDF
GraalVMについて
PDF
VRカメラが楽しいのでブラウザで見たくなった話
PDF
最近のJava事情
PDF
怖いコードの話 2018/7/18
PDF
Java新機能観察日記 - JJUGナイトセミナー
PDF
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
PDF
これからのコンピューティングの変化とこれからのプログラミング at 広島
PDF
Summary of JDK10 and What will come into JDK11
PDF
Summary of JDK10 and What will come into JDK11
PDF
Java10 and Java11 at JJUG CCC 2018 Spr
PPTX
New thing in JDK10 even that scala-er should know
PPTX
Java Release Model (on Scala Matsuri)
PDF
これからのJava言語と実行環境
PDF
JavaOne報告2017
PDF
JavaOne2017で感じた、Javaのいまと未来 in 大阪
PDF
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
PDF
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
GraalVMの紹介とTruffleでPHPぽい言語を実装したら爆速だった話
GraalVM at Fukuoka LT
これからのコンピューティングの変化とこれからのプログラミング in 福岡 2018/12/8
GraalVMについて
VRカメラが楽しいのでブラウザで見たくなった話
最近のJava事情
怖いコードの話 2018/7/18
Java新機能観察日記 - JJUGナイトセミナー
プログラマになるためになにを勉強するか at 九州学生エンジニアLT大会
これからのコンピューティングの変化とこれからのプログラミング at 広島
Summary of JDK10 and What will come into JDK11
Summary of JDK10 and What will come into JDK11
Java10 and Java11 at JJUG CCC 2018 Spr
New thing in JDK10 even that scala-er should know
Java Release Model (on Scala Matsuri)
これからのJava言語と実行環境
JavaOne報告2017
JavaOne2017で感じた、Javaのいまと未来 in 大阪
Java8 コーディングベストプラクティス and NetBeansのメモリログから...
NetBeansのメモリ使用ログから機械学習できしだが働いてるかどうか判定する
Ad

null使ったら負け東京版