Submit Search
null使ったら負け東京版
•
10 likes
•
5,195 views
なおき きしだ
Follow
1 of 27
Download now
Download to read offline
More Related Content
null使ったら負け東京版
3.
null書いたら負け ● Streamはコーディング規約で禁止でもいい ● Date
and Timeはよくわからない
7.
Optionalとは ● java.util.Optional<T> ● ScalaでいうOption ●
HaskellでいうMaybe ● 値をもつかもたないか
8.
Optionalを用意する ● 値がある Optional.of(str) – nullを渡すとぬるぽ ●
値がない Optional.empty() ● 値があるかどうかわからない Optional.ofNullable(str)
9.
値があるかどうか判定する if(ostr.isPresent()){ System.out.println(ostr.get()); } ● isPresent
10.
別の値に変換する ● map Optional<String> ostr
= Optional.of(str); ostr.map(String::length) .ifPresent(System.out::println);
11.
モナド! ● nullのある世界とない世界の分離
12.
nullを使っていいところ悪いところ ● ローカル変数 ○ ●
引数 △ ● フィールド × ● 戻り値 ×
13.
Java8のほかの作法 ● Streamでの注意 ● メソッド参照とラムダの使い分け ●
遅延実行をいかす ● Mapを活用する ● 制御構造を自作する
14.
Streamでの注意 ● 副作用に気をつける
15.
副作用に気をつける ● 副作用を使う基準 – 中間操作
× – 終端操作 ● reduce △ ● forEach ○
16.
遅延実行をいかす ● 値が使われる可能性の低い引数の構築に時間がか かるとき ● Logger ●
Optional – Optional#orElseGet – Optional#orElseThrow logger.debug(bigObject.toString()); logger.fine(() -> bigObject.toString());
17.
Mapを活用する ● Map<?, LIst<?>> ●
メモ化
18.
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);
19.
メモ化 ● Map#computeIfAbsent – 値があればその値、なければ計算を行って結果を Mapに格納しつつ返す。
20.
制御構造を自作する ● カスタムwith ● カスタム分岐 ●
カスタムループ
21.
カスタム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アクセス! });
22.
カスタム分岐 ● パターンマッチ – 型安全なオブジェクトごとの操作と分解 http://d.hatena.ne.jp/nowokay/20131212#1386820115
23.
カスタムループ ● forEach ● zip
24.
zip ● ふたつのStreamをまとめる
25.
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)); }
26.
メソッド参照とラムダの使い分け ● メソッド参照は引数を隠す ● 読み解くのにコンテキスト理解が必要 –
メソッドに渡すためのメソッド ○ – 引数ひとつのメソッド △ – 引数複数のメソッド ×
27.
Java8の弱点 ● 型推論が案外弱い http://d.hatena.ne.jp/nowokay/20140107#1389093206
Download