JJUG CCC 2017 Spring の発表スライドです。Haskell 互換なふたつの JVM 言語 Frege と Eta について、モナドを利用した Java ライブラリ呼び出しの技法を解説します。 関連ブログ記事 : http://ccvanishing.hateblo.jp/entry/2017/05/21/150903
![Java8 コーディングベストプラクティス and NetBeansのメモリログから...](https://cdn-ak-scissors.b.st-hatena.com/image/square/0e1f3dabed94199ef57cfb19c5b261a8e1e64b7f/height=288;version=1;width=512/https%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fjava8andnblog-170520092057-thumbnail.jpg%3Fwidth%3D640%26height%3D640%26fit%3Dbounds)
概要(お前は何を言っているんだ) コードレビューしていると、Java8のfeature(Stream APIとかOptionalとか)を使ってるんだけど、Java7以前と大差ない書き方をされているコードをよく見かける。 もっと皆にJava8っぽいコードを書いて欲しい。そうじゃないともったいない。 (*"Java8っぽい"の基準は割りと(かなり?)私見が入っている) 言葉を尽くしても伝わりづらいので、例を作ろう。 ← これ ついでに、「無理してJava8のfeature使うことで、逆に悪くなってしまっている例」も作ろう。 対象読者 Java8でコード書いてるけど、Java7以前の書き方が染み付いちゃっていてなかなか抜け出せない人 「forやnullチェックは絶対使うべきでない」という思いが強すぎて、何でもかんでもStream APIやOptional使ってる人 Notice この記事で書いて
Java8でBDDスタイルのテストをする J8Specライブラリ J8Specは、(RSpec)[http://rspec.info/]や(jasmine)[http://jasmine.github.io/]のように、 Java8でBDDスタイルを使ってテストを記述することができるようになるユニットテストライブラリです。 JUnit runnerを使っているので、IDEから使用することも可能です。 環境 今回使用した動作環境は以下のとおりです。 OS : MacOS X 10.10.5 Java : 1.8.0_51 Gradle : 2.5 J8Specのサンプル作成 1.プロジェクト作成 ではJ8Specを使ってみます。gradle用プロジェクトを作成後、 下記 のようにbuild.gradleを記述し、j8specライブラリを追加します。 defaultTasks 'clean',
> java -jar "C:\Users\hoge\Desktop\xyz.hotchpotch.reversi-2.0.0-20160108.jar" あとは表示されるメニューに従って操作するだけです。「ConsolePlayer」を選ぶと、コンピュータと対戦することができます。 ■■■ 2. AIプレーヤーを自作してみる ■■■ 準備と作成 ふつうの java プロジェクトを作成します。(java8準拠にすることをお忘れなく。) こちら から xyz.hotchpotch.reversi-x.x.x-yyyymmdd.jar をダウンロードし、ビルド・パスに設定します。 xyz.hotchpotch.reversi.framework.Player インタフェースを実装し、AIプレーヤークラスを自作します。 ※より詳しい手順は こちらのサイト を参照してください。 動かす 上記の e
Java8 を使いこなそうとすると、やはり Date and Time API も使いこなす必要がでてくる。 我々 Perl 畑出身の人間からすると、Perl の世界では DateTime/Time::Piece というモジュールが一般的に日付の計算に使われており、iandeth.さんのブログエントリがチートシートとしてよく知られている。このいつも見慣れたエントリの体裁で、一般的な日時の操作を実用的に教えてくれるエントリが欲しくて書いた。 junit のテストケースとして書いてあるので、適当にコピペして QuickJUnit で動作確認するとよい(assertはしてないけど)。 なにかあれば教えていただけるとありがたいです。
The document discusses various techniques in Perl for dealing with reference cycles and memory leaks caused by strong references, including using weak references, extracting needed data from objects before destroying them, and passing objects into subroutines to avoid capturing them. It also discusses analogous techniques used in Objective-C like weak references and guard objects to break cycles.
前提 Java SE 8 + Linux 前提です。 Java で暗号的に安全な乱数をえる Java で暗号的に安全な乱数を得るには SecureRandom クラスを利用します。 SecureRandom ではいくつかの乱数生成アルゴリズムをサポートしています。 各プラットフォームでもっとも安全な SecureRandom の実装は ${JAVA_HOME}/jre/lib/security/java.security の securerandom.strongAlgorithms という項目に書いてあります。 SecureRandom#getInstanceStrong() で取得できるのはこれです。 インスタンスの取得方法 new SecureRandom() でデフォルト実装が得られます OSX や linux では NativeBlocking です(SHA1PRNGの場合もある
特定の条件で例外を投げるコードを書いたときに、それをテストしたい。なんてときがある。 このクラスの例外があがってるってことだけ判断できればいいんだけどな、ぐらいのゆるい条件のとき。 そんな時は以下のようなユーティリティを定義すればいい。 public static void assertThrows(Class<? extends Exception> exceptionClass, Code code) { boolean thrown = false; try { code.run(); } catch (Exception ex) { System.out.println(ex); assertTrue(exceptionClass.isInstance(ex)); thrown = true; } assertTrue(thrown); } @FunctionalInterface
Java 8から、jdepsというクラスの依存関係を解析するツールが増えたそうです。 Java class dependency analyzer. http://download.java.net/jdk8/docs/technotes/tools/unix/jdeps.html http://download.java.net/jdk8/docs/technotes/tools/windows/jdeps.html ちょっと興味があったので、試してみることにしました。 使ってみる まずは、スケープゴート的なソースを用意してみます。 PrintLoop.java import java.util.stream.IntStream; public class PrintLoop { public static void main(String... args) { IntStream .r
そろそろJDK 8のLambdaをちょっとは勉強しなくてはと思いつつ、Eclipseとかが無いと何も出来ない程度には惰弱なJavaプログラマ勢なので、環境を作って勉強できるように試みた。 やること Trying Out Lambda Expressions in the Eclipse IDEという「Eclipse IDEでLambda式を試そうぜ」な大変有り難い記事があるのでコレを読んでサンプルコードを試す。また、Eclipse IDE with JDK 8 supportのリンクからJDK8対応のEclipseがダウロードできるようになっている。この記事用に用意されたEclipseだと思われるが、ちょろっと試す分にはコレで充分そうであるのでコレを使う。 2014/06/11 追記 Eclipse Kepler SR2のJava 8サポートのパッチ - kagamihogeの日記 201
Java8で関数が値として扱えるようになりました。 このことが、「関数が渡せると便利だよね」という観点ではなく、プログラミング言語としての能力をどのようにあげるか考えてみます。 圏論からのテクニックが使いやすくなる 集合論はどちらかというと値にたいする理論でしたが、圏論は関数呼び出しに関する理論です。 プログラムには、関数呼び出しを連結させて値を変換していくという側面があります。 そのような関数呼び出しの扱い方を整理するのが圏論で、圏論の考え方を使うことでより安定したプログラムを書くことができます。 モナドなど圏論由来のテクニックを使うには、どうしても関数を値として扱う必要があります。 関数を値として扱うことで、圏論のテクニックが使いやすくなり、安定したプログラムの書きやすさにつながります。 型の証明能力があがる 動的な型付の言語にくらべて、静的な型付の言語はプログラムが間違いにくいといわ
さて、前回Java8のStreamの使い方をざっと見てみたのですけど、はてなブックマークのコメントで「Javaが使われている領域でこんな言語拡張は必要か」「可読性が損なわれていて単なる自己満足ではないか」のようなコメントがついていました。 実際どうなのか考えてみます。 Java8のStreamの目的 では、いまJavaが使われている領域を考えてみましょう。 Javaがいまよく使われているのは、クライアントサイドではなくサーバーサイドです。とくに、直接アクセスをうけつけるサーバーではなく、分散データ処理のためのHadoopやHBase、全文検索エンジンのLuceneなど、バックエンド処理を行う製品のシェアが大きいように見えます。 TwitterやGoogleでも、Javaで書かれたバックエンドが動いているようです。Facebookも分析系ではJavaを使っているようです。 大手サービスでバッ
さて、Java8で関数型っぽいことをやって遊んでみたわけですが、実際はそんな書き方しませんよね。 Java8で実際に使うのは、Streamです。 ということで、Streamの使い方をひととおり見てみます。 ※5/17 仕様変更があったので、修正しました 基本 まずは、Iterableインタフェースに用意されたforEachメソッドを見てみましょう。 List<String> names = Arrays.asList("hoge hoge", "foo bar", "naoki", "kishida"); names.forEach(s -> System.out.println(s)); これで次のように表示されます。 hoge hoge foo bar naoki kishida いままでの拡張forだと次のように書いてました List<String> names = Arrays.a
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く