null使ったら負け東京版
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

null使ったら負け東京版

on

  • 1,052 views

 

Statistics

Views

Total Views
1,052
Views on SlideShare
1,005
Embed Views
47

Actions

Likes
2
Downloads
3
Comments
0

2 Embeds 47

http://www.slideee.com 32
https://twitter.com 15

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

null使ったら負け東京版 Presentation Transcript

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