goo blog サービス終了のお知らせ 

ひしだまの変更履歴

ひしだまHPの更新履歴。
主にTRPGリプレイの元ネタ集、プログラミング技術メモと自作ソフト、好きなゲームや音楽です。

Java10 var

2018-04-21 22:57:35 | PG(Java)

Java10が2018年3月に出たんだけれども、その月はドラゴンクエストビルダーズのビルダー100景コンテストの応募期間だったので、そちらに注力しておりました
ビルダー100景コンテストで採用されると、今度発売されるドラゴンクエストビルダーズ2のエンドロールに名前が載るとあって、当然力を入れますわな(笑)

4月に入ってからも有志のDQB桜コンテストでアイデアが沸いたのでちょっと作っていました

というわけでJava10を調べるのが遅くなってしまったわけですが、とりあえずvarだけ試しました。


JUnit5を試してみた

2017-09-16 17:37:50 | PG(Java)

https://twitter.com/t_wada/status/907045767579185152
https://twitter.com/t_wada/status/907057690068664320という話がありまして。
opengl-8080さんとかかずひらさんとかそのうち書くかもしれないしmike-neckさんとか既に色々書いているようだけど、自分もJUnit5を試してみた

JUnit4ではhamcrestを使ってassertThat(actual, is(expected))だったけど、結局この方式ではなくassertEqualsを使う方式に戻った雰囲気。
ただ、インポートすべきパッケージ名は変わったし、メッセージを入れる位置が第1引数から最後の引数に変わったので、従来のテストクラスがそのまま使えるわけではない。

例外のテスト(assertThrows
タイムアウト(一定時間内に終わる事)のテスト(assertTimeout
パラメーターを渡すテスト(ParameterizedTest
なんかは綺麗に書けるようになった。

現時点ではEclipseはベータ対応だし、AsakusaFWもJUnit4のままだが^^;、
新しく作るプロジェクトならJUnit5にしてもいいかも。


Java8 ラムダ式とメソッド参照のシリアライズに関するEclipseのバグ

2017-07-27 01:48:52 | PG(Java)

ひょんな事からJava版Sparkをいじる機会があって、JavaRDDのmapメソッドにラムダ式を渡したら通るのにメソッド参照を渡したら実行時に例外が発生するという事態にぶち当たった。
これはラムダ式とメソッド参照の挙動の違いを発見か?!と思ったが、結果的にはEclipseのバグだった。
で、そのバグを再現する最小限のプログラムを作ろうとしたら、別の挙動(これもEclipseのバグ)に当たってしまった。
(前者はメソッド参照のシリアライズに関するEclipse新バージョンのバグで、後者は旧バージョンのバグ。バグを修正したら新しいバグが生まれてしまった感じに見える^^;)

これに関連して、ashigeruさんからメソッド参照のキャプチャーに関する話を聞いたが、これは知らなかった。知らないとハマることがありそう。


Java本格入門

2017-04-15 17:23:06 | PG(Java)

dentomoさんから『Java本格入門』を頂きました。ありがとうございます。
(著者は谷本心さんを始めとするAcroquest Technology株式会社の方々ですが、編集がdentomoさんのようです)
なんと、p.436の参考文献に、そうそうたる本に混じって自分のウェブページのURLが載っています! うわ~嬉し恥ずかしw
(「この本を読んだ人たちが次に参考に出来るサイト」という意味かなーと思ったら、書いた人が本当に参考にしていたみたいです^^;)

このJava本格入門、入門の名の通りJavaの基本的な文法も扱っていますが、そこからさらに、よく使われるライブラリーやJavaで開発するために知っておいた方が良いこと(デザインパターン・ログ出力・JUnit、果ては例外の使い方やマルチスレッドに関する注意点・Checkstyle/Findbugs等)についてまで載っています。
まさに仕事でJavaを扱う人なら知っておいて欲しい内容です。
(まぁ僕自身はFindbugsとか使ってないんですが(爆)、例えばAsakusa Frameworkのソースはそれでチェックされています) 

本書のJavaのバージョンはJava8ですが、従来のバージョンで普通に使われていたライブラリーも新しいライブラリーも載っています。例えばFilePathDate/CalendarDate and Time APIなど。
各章のコード例や末尾に載っている応用に関する話題等も参考になります。例えばp.145のConcurrentHashSetの件とか知りませんでしたし、p.171のmapToObj(i -> "?")も、なるほどiを無視する使い方もあるか!と思いました。

また、あまり良くない入門書だと「その説明だとちょっと違うんだよな~」という違和感があったりするのですが、本書にはそういう違和感がありませんでした。
レビュー陣がよほど厳しかった素晴らしかったのでしょうw

Java本格入門は、Java8を対象とした入門書としてとても良いのではないでしょうか^^