JJUGイベント 「祝☆Java 8 Launch」に参加してきました

JJUGイベント 「祝☆Java 8 Launch」に参加してきました。
【東京】JJUGイベント 「祝☆Java 8 Launch」3/21(金/春分の日)開催 | 日本Javaユーザーグループ

今回のJava8ではラムダやDate and Time APIなど
いろいろと追加されたことがあって
気になっていたので参加しました。

【祝 Java SE 8 正式リリース】

スピーカー:寺田 佳央さん(@
スライド:New Feature Of Java SE 8

[メモ]
  • Java8が生まれるまで
    • 本来はJava7にラムダなどを入れる世予定だった
    • Java7ではProject CoinやNIOなど一部の機能をリリース
    • セキュリティ問題が発生によりリリース時期がずれる
      • セキュリティ対応を優先していた
  • 言語仕様が変わっただけではない
    • VMのパフォーマンス改善
    • クラスファイルフォーマットの変更
    • メモリの使用量の改善
  • Java8で読んだほうがいいドキュメント
    • リリースノート
    • 互換性・非互換性の情報ガイド
    • リリース時の既知の問題
    • サポートロードマップ
  • 今後のJava祭り
    • 5/18 JJUG CCC Spring2014
    • 5/22 Java Day Tokyo
    • 5/23 Java Rhasberry Piハンズオン
    • 5/24 Java Bike Rid(サイクリング)
[感想]

今回はラムダとDate and Time APIに注目していましたが、
それだけではなくプラットフォームとしてのJavaの改善や
Copmcatプロファイルなど気にすべき点が多いなと思いました。

【徹底解説!Project Lambdaのすべて リターンズ】

スピーカー:吉田 真也さん(@)
スライド:徹底解説!Project Lambdaのすべて リターンズ[祝Java8Launch #jjug]

[メモ]

  • ラムダをつかうと・・・
    • マルチコアCPU対応
    • コードをスマートにする
  • 型推論の強化
    • ダイヤモンドオペレータがパラメータでも使えるようになった
  • 交差型キャスト
[感想]

ラムダ式とStreamAPIのみしか知らなかったので、
Project Lambdaに関する全体像が良くわかりました。

【Brand new Date and Time API

スピーカー:蓮沼 賢志さん(@)
スライド:http://www.slideshare.net/btnrouge/jdk8-threeten

[メモ]
  • 日付
    • 日の出から次の日の出が1日
    • 日の出から日没までの12分割が1時間
  • 時刻
    • 世界中が同じ時刻ではない
    • タイムゾーンは一つの事項を共通する地域
    • GMT グリニッジ標準時
    • UT UniversalTime
      • UT0〜UT2まである
      • 生活時間に最も近い時間
    • TAI 原子時計の基準時刻
      • 正確な時間だけどUTとは結構ずれている(UTがずれている)
    • UTC
      • UTをベースにTAIに近づけたもの
  • ISO8601
    • グレゴリオ暦(西暦)
    • dutation:1年何ヶ月などの期間
    • period:3/14〜3/20などの期間
  • JSR310 Date and Time API
    • java.util.timeがベース
    • ZonedDatetimeはISO8601に準拠していない
    • オブジェクトはImmutable
  • APIのメソッド
    • ofから始まるのはファクトリ
    • atから始まるのは拡張
    • toから始まるのは変換
[感想]

Date and Time APIだけではなく、
時間に関する情報も多く勉強になりました。

DateやCalendarからの移行は気になるところです。

【null書いたら負け!Java8コーディング作法】

スピーカー:きしだ なおきさん(@)

[メモ]
  • 負け
  • Optional
    • Optionalの世界ではぬるぽしない
    • mapを使ったほうがいい
    • nullを外側に出さない
    • JavaでNullを返したら巻け
      • m9(^Д^)
  • Streamの注意
    • 副作用には気をつける
      • 中間操作では使ってはダメ、終端で使う場合は気をつける
    • 遅延実行を活かす
      • ラムダ使うと実現できる
  • メソッド参照
    • コンテキストの理解があるときのみ使う
    • 逆に可読性が落ちる場合がある
[感想]

今までパラメータのチェック漏れでぬるぽすることがありましたが、
Optionalを使えばそういうのもなくなりそうですね。

m9(^Д^)されないようにNullの扱いは気をつけます。

JavaFX  GUI by Illusion】

スピーカー:櫻庭 祐一さん(@)
スライド:JavaFX 8 - GUI by Illusion

[メモ]
  • Swingからの移行
    • クラスの構成はほぼ同じ
      • 最初はFXMLよりJavaでやったほうがやりやすい
    • コンポーネントはクラス名を変えればほぼ使える
      • DialogはJavaFXで使うには独自作成する必要がある
      • テーブルとツリーは鬼門
  • JavaFX8
    • パフォーマンス改善
    • 機能追加
      • 3D、印刷、テーマ、データピッカー.etc

[感想]
Webアプリケーションしか作ったことないので
JavaFXはつかったことないのですが、
3Dやアニメーションなどを十行ほどで追加できるのはすごいですね。

【from old Java to modern Java reloaded】

スピーカー:谷本 心さん(@)

[メモ]
  • ファイル操作(ファイルから一行ずつ取り出す処理)
    • Java7まで
      • try with resources
      • NIO
    • Java8
      • NIO + forEachを使えば楽
      • UncheckedIOException(RuntimeException)が追加された
    • for,whileはstreamに置き換えられる
      • map collectから勉強し始めると良い
      • ラムダ式の中で例外処理しないといけない
    • 何でもかんでもラムダにしない
  • 文字列操作(カンマ区切りにする処理)
    • Java7まで
      • StringBuilder#append
    • Java8
      • String#join
  • 複雑な処理(リストから特定のデータを分類ごとに集計)
    • filter,map,collectなどを駆使する
      • 覚えるためには特にかくかくしかない
    • Mapの場合、EntrySetからStreamを取得する
    • Streamを中間オブジェクトとして保持しないほうがいい
  • StreamAPIを動運用していくか
    • 自分たちのチームの技量など考慮し標準を作る
[感想]

ラムダを効率よく使えばコードが非常に簡潔になるのが
よくわかるセッションでした。

なれるためにfor,whileはStreamで書こうと思います。

Raspberry Pi on Java ショートアップデート】

スピーカー:太田 昌文さん(@)

[メモ]

  • 注意
    • 電源周りは注意点が多い
    • Java8のHard float only
    • rpi-updateでカーネルアップデートができる

[感想]
以前Raspberry Piを触っている人と話をしていたときは
自分には関係ないなぁと思っていましたが、
Javaが扱えるようになると無関係でもないですね。

【参加してみて】

参加するまではラムダはリストを扱うための
単純なシンタックスシュガーでしかないのかなと思っていました。

実際はシンタックスシュガーというだけではなく、
コードの組み方が変わるレベルだったなぁと考えが変わりました。

JVMのパフォーマンス改善やCompactプロファイルなど
ラムダ以外も注目しないといけない箇所が
あるなというのも実感できました。

参加して良かったなと思えるセミナーでした。