「祝☆Java 8 Launch」に行ってきた #JJUG
3/18にリリースされたJava SE 8を勉強するためにJJUGの勉強会に参加してきました。
- 概要
- Togetter
何回かOracleに来てますが、2部屋ぶちぬきでしかもテーブルなしというのははじめてでした。
っと思ったら、MAX300人はOracle初だったらしいです。
最初にまとめ
メモが長くなってしまったので、最初にまとめ。
祝 Java SE 8 正式リリース
13:00〜13:30 祝 Java SE 8 正式リリース 寺田 佳央(@yoshioterada) 日本オラクル Java エバンジェリスト 2011 年 7 月に Java SE 7 がリリースされ、ついにJava SE 8 が正式にリリースされました。Java SE 8 では目玉機能である Project Lambda の他、JavaFX の統合、新規 JavaScript エンジンの提供など、50 を超える機能が追加もしくは改善されています。 本セッションは Java SE 8 の概要をわかりやすくご紹介します。
- テクニカルの話はない。
- 今日の話で出てこない話をする。
- 135枚のスライドは全部紹介できないので、blogに書くのでそっちを見てくれ。
- JavaSE 7を出す時に全部ひっくるめて出すか、段階的にリリースしていくか。
- 段階的にリリースしていくことに決定。
- SE7 2011年7月28日リリース
- 会場にいる方の現在使用Javaバージョンの調査。
- 7が圧倒的。
- 1.4の人も何人か。
- 2012年7月17日
- JigsawはJavaSE9へ持ち越し。
- 2013の年始から中旬までOracleのトップ判断で、セキュリティ脆弱性対応に集中。
- スケジュールをずらしても構わないとの事。
- 2014年4月26日
- 2014/03/18にリリース決定。
- JSR-337 : Java SE8
- JavaSE8にすることのメリットは多くある。
- クラスファイルのフォーマットなども変わってる。
- パフォーマンスを上げるための機能、既存のライブラリにも修正が。
- メモリの使用量も減っているらしい。
- 新機能を使用しなくても、メリットはたくさんある。
- Compactプロファイル。(ファイルサイズが異る。)
- 各APIにどのプロファイルで利用可能か記載されている。
- 参考資料
- Java7のサポートも来年4月に変わっている。
今後のJava関連イベント
5月のJava祭り
- Java Day Tokyo開催決定
- 2014/5/22
- Java Day Tokyo 申し込み開始
- 2014/04/02
- JJUG CCC Spring
- ベルサール西新宿
- 2014/05/18
- Raspberry Pi ハンズオン
- 2014/05/23
まとめ
新機能だけじゃなくて、色々加わってる。
楽になってるし、早くもなっている。
徹底解説!Project Lambdaのすべて リターンズ
13:30〜14:20 徹底解説!Project Lambdaのすべて リターンズ 発表者:吉田 真也(@bitter_fox) 立命館大学 立命館コンピュータクラブ Java 8 における最大級のプロジェクトであるProject Lambda で導入された言語特徴のすべてを解説します。また、Project Lambda で導入されたStream API も解説します。 なぜその特徴を導入しなければいけないかや他の特徴とどのように関連しているのかについても説明しますので、より広い視野でProject Lambda を理解することができます。 Project Lambda のそれぞれの特徴と全体像を理解できるセッションです。
- Lambdaの開発者にツッコミを入れたりしてるらしい。
- 大学生。立命館大学。
- アップデートには2種類ある
- エボリューション
- レボリューション
- 日本語的には進化と革命
- Jdk5以来、レボリューションは10年ぶり2004年ぶり。
- ラムダは、並列処理を容易に書けるように増強。
- ライブラリ、言語
- マルチコアCPU
- クロック数はそのまま、コア数を増やす。並列処理。
- 並列プログラミングをしないと、性能を活かすことが出来ない。
- 並列処理
- Java5で大きな粒度 簡単
- Java7で小さな粒度 やや難
- 全てプログラマが欠かないといけないから難しい。
- Java7で小さな粒度 やや難
- 処理を分けるだけで5行(匿名クラスを使用)
- 言語的に解決する必要がある。
- ラムダ式の導入
- 言語的に解決する必要がある。
- ライブラリの増強
- 度公開されたインターフェイス
- 変更を加えにくい → デフォルト実装
- 全体像、ラムダの全体で7個。
ラムダ式・メソッド参照
実質的にfinal
交差型キャスト
- キャスト式に交差型を。
- T extends
- 型合成される
- ぶっちゃけ使わないwww
- APIでも使用してるクラスは5個
デフォルト実装
コアライブラリ
- StreamAPI
- Optional
- JCF
- IO
- And more
- StreamAPI
- イテレーションが外に晒されている
- for,while文
- StremAPI
- 並列化が簡単に行える。
- java.util.stream
- ソースから生成される。
- 中間操作と終端操作でデータを弄る。
- 並列化が容易
IntStream.rangeClose(0,10).forEach(i -> System.out.println(i)); // 偶数のみ表示 IntStream.rangeClose(0,10).filter(i->i%2==0).forEach(...) // Personのリストから名前を出力 // map persons.stream().map(p-> p.getName()).forEach(....) // Personのリストから名前のリスト persons.stream().map(Person::getName).collect(p-> )
まとめ
- 元々はマルチコア対応
- 結果としては汎用的な仕様に
- よりスマートなコードへ
null書いたら負け!Java8コーディング作法
14:30〜15:20 null書いたら負け!Java8コーディング作法 発表者:きしだ なおき(@kis) 負けだよ。
- null書いたら負け!
- Streamはコーディング規約で禁止でもいい
- Date and Timeはよくわからない
だが、nullお前だけはダメ。
- java.util.Optional
- 値を持つか持たないかを判別。
- nullのある世界とない世界の分離
- nullを使っていいところ悪いところ
- 良い
- ローカル変数
- 微妙
- 引数
- 悪い
- フィールド
- 戻り値
- nullを外に漏らさなければOK
覚えて欲しいのは
nullを返すメソッドを書いたら負け。
Java8の他の作法
- Streamでの注意
- メソッド参照とラムダの使い分け
- 遅延実行を活かす
- Mapを活用する
- 制御構造を自作する
- Streamでの注意
- 副作用に気をつける
- メソッドの中でメソッドの外に影響を与えない
- 副作用を使う基準
- 中間操作×
- 終端操作
- reduce △
- forEach ○
- 遅延実行を活かす
- 値が使われる可能性の低い引数の構築に時間がかかる時
logger.debug(bigObject.toString()); logger.fine(()->bigObject.toString());
-
- Optional
- Optional#orElseGet
- Optional#orElseThrow
- 使う可能性が低い時はラムダにしとけば、使うときにのみ実行してくれる?
- Optional
- Mapを活用する
- Map>
- 追加
- Map#computelfAbsent
- Mapが空だった時にその値を突っ込んで返してくれる?
- 削除
- Map#computerlfPresent
- メモ化
- Map#computelfAbsent
- 値があればその値、なければ計算を行って結果をMapに格納しつつ返す。
- 制御構造を自作する
- カスタムwith
- カスタム分岐
- カスタムマッチ
- カスタムループ
- メソッド参照とラムダの使い分け
- メソッド参照は引数を隠す。
- 読み解くにはコンテキスト理解が必要。
- メソッドに渡すためのメソッド○
- 引数一つのメソッド△
- 引数複数のメソッド×
Brand new Date and Time API
15:30〜16:20 Brand new Date and Time API 発表者:蓮沼 賢志(@khasunuma) JSR 310 オブザーバー Java Community Process (JCP) では、2007 年から Java の日付と時刻の扱いを改善する JSR 310 “Date and Time API” を開始し、7 年の歳月を経て Java SE 8 の標準 API として結実しました。これまでの Date や Calendar とは全く異なる思想で開発された最新の日付・時刻 API を今日から活用して頂けるよう、このセッションがお手伝いを致します。
JavaFX – GUI by Illusion
16:30〜17:20 JavaFX – GUI by Illusion 発表者:櫻庭 祐一(@skrb) Java in the Box Java SE 8 では、Swing に代わり JavaFX が標準の GUI ライブラリとなります。 JavaFX は、XML で GUI の構造を記述し、CSS で見た目を、Java でロジックを記述するようになります。また、組み込みブラウザやチャートなど多くの機能が提供されています。 本セッションでは、JavaFX の基本から、Swing からのマイグレーション、JavaFX 8の新機能などを、デモを交えて紹介します。
- 今までJavaに無かったエフェクトを入れるよということでJavaFX
- "%jre%\lib\calendars.properties"に和暦とかを追加することができる。
- JavaFXって何
- Swingからの移行
- JavaFX 8の新機能
- JavaFXって何
- SceanBuilder
- EclipseはeFXclipseで連携できるらしい。
- Browser
- 3行
WebView view=new WebView(); WebEngine engine = view.getEngine(); engine.load("http://www.google.com");
- Media
- 標準的な形式は大体動く
- Effect
- 一通りできる
- Animation
- 当たり前のように動く
- Touch Gesture
- 1行で回転!1行でズーム!
- robovmっというの使えばIOSで動作するように変換できるらしい。
- Swingからの移行
- 構造は殆ど同じ、
- ただ、FXMLでかけるよ!
- 各クラスに関してもJを除いたり、似た名前であります。
- 属性とかも殆どそのまま使える。
- TableやTreeに関しては考え方が変わってるので鬼門になるかも。
- JavaFX8
- 3Dを簡単に説明
- FXは新しいGUIライブラリなんだよ
- FXML-CSS-Javaで書ける
- いろいろ新しいのが入ったよ。
- Swingから簡単に移行できるよ。
- JavaFX8は色々すごいよ!
- OpenJDKでも動く。
from old Java to modern Java – reloaded
17:30〜18:20 from old Java to modern Java – reloaded 発表者:谷本 心(@cero_t) Acroquest Technology Java SE 8がリリースされるというニュースを目にしても「どうせ仕事では使えないし」と冷ややかに見ていませんか? 確かに開発の現場では、様々な制約のために古いバージョンのJavaを使わざるを得ないことがあります。しかしだからと言って学ばないままでいると、いざ新しいバージョンのJavaを使おうという時に、ついつい古いAPIを使ってしまったり、古い慣習に従って書いてしまうことになるでしょう。 このセッションでは、JavaのAPIや慣習について、古い時代のものからJava8までの歴史を振り返りながら、イマドキの書き方を紹介します。
- 仕事でJava8を使おうと思った時に何を気をつければいいのか。
- 老害にならないためのJava8入門。
- ラムダで欠かれたコードをレビューした時に読みにくいと言わないように勉強しなければならない。
- finallyでCloseするのは古い定石(〜Java6
- tryの中で開く。(〜Java7
- FilesとかPathクラスとか使わないとダメだよね。
- try-with-resourcesとFilesとPathで操作する。(Java7〜
Files.lines(Paths.get(fileName)).forEach(s-> lines.add("<" + s + ">"));
- forやwhileをみたらStream APIへの置換えを考える。
- ラムダでmapとcollectはよく使う。(Streamはここから始める)
- 何でもかんでもLambdaにすればいいわけじゃない。
- 「ラムダ禁止」でググる。
- ラムダのAPIをもっと便利に使うことができる。
まとめ
自分たちの標準としてどうすれば読みやすくするかチームで考えよう!
Java本格入門(仮)鋭意執筆中!
Raspberry Pi on Java ショートアップデート
18:20〜18:30 Raspberry Pi on Java ショートアップデート 発表者:太田 昌文(@masafumiohta) Japanese Raspberry Pi Users Group 昨年度のリリースからRaspberry PiにOracle Javaが標準パッケージとしてインストールされるようになりました!Raspberry Pi Foundation FounderであるEben UptonもPythonの他JavaもRaspberry Piで使えるプログラミング言語として注目をしております。ここではごく簡単にRaspberry Piのご紹介とJava Embedded on Raspberry Piのアップデートについてお話しいたします。