Groovy
前回に続き、今回は GDK が java.io.File オブジェクトに追加する文字列・文字ストリーム関連のメソッドを見ていきます(目次)。 前回のバイト配列・バイトストリーム関連のメソッドよりよく使うかと思います。文字はデータ的に見れば「バイト + 文字セット…
Groovy では GDK の機能によって java.io.File クラスにいろいろメソッドが追加されていて、ファイル入出力が非常に手軽になっています。 その反面、追加されているメソッド数が多いため、どんなメソッドがあるのか把握し切れていない人も多いのではないでし…
Closure 型のプロパティを使って class Main{ def closure = { println 'This is closure.' } } def main = new Main() main.closure() とやると普通に実行できて「This is closure.」と表示されます。 Groovy ではオブジェクトに対して () を付けると call(…
こちらの記事で、Groovy をインストールしていない環境で Groovy スクリプトを実行する方法が書かれてました。 この方法では、スクリプトの実行に必要な Groovy と Ivy*1 の Jar ファイル自体は実行者に用意してもらう必要がありました。最近、Clojure の勉…
今さらかも知れませんが、Groovy でコンストラクタを実装する方法をあれこれ試してみました。 今回試したのは以下のような方法です: 基本 デフォルト・コンストラクタ 名前付き引数 コンストラクタ定義 アノテーションによる AST 変換 @InheritConstructors…
以前に、既存のクラスに対してメソッドを追加するメタプログラミングの1つの方法として「マジック・パッケージを試してみる」ってことをやってみました。 この方法では、メタクラスを使う方法に比べて「動的にメソッドを追加する処理を実行する必要がない」…
Clojure やっててマクロのあたりの構文クォート、アンクォート、スプライシング・アンクォートあたりが全然分かんなかったので、無理矢理 Groovy っぽく解釈してみました。 サンプルの Groovy コードはかなり力ずくで、(動作はするけど)実際に使えるコード…
今回はクロージャのメモ化 (memoize)。 カリー化、トランポリン同様、メモ化も関数型言語では大抵実装されている機能ですね。 メモ化すると「キャッシュするバージョンのクロージャ」が生成されます。参考 「クロージャのメモ化」 「Groovy v1.8の新機能をサ…
今回はクロージャのトランポリンに関するメソッドを見ていきます。 前回見たカリー化(部分適用)と同じく、トランポリンも関数型プログラミングでは大抵サポートされている機能なようで、それを Groovy に取り入れたって感じのようです。 主な解説は書きの…
今回はカリー化、というか部分適用を行うメソッドを見ていきます。 クロージャのカリー化(部分適用?)とは、あるクロージャに対して予め引数の一部を固定したクロージャを生成する操作です。 拙者は関数型プログラミング初心者なので、カリー化と部分適用…
前回までで Groovy 1.7 以前に Closure クラスに定義されていたメソッドは大体使ってみました(幾つか残ってますが)。 1.8から追加されたメソッドは『プログラミングGROOVY』で解説されてるし、ネット上でも記事を見つけられるので、今まで以上に雑な説明で…
今回は Closure クラスに定義されている、制御構造に関するメソッドもしくは制御構造風に使えるメソッドを見ていきます。 今回扱うメソッドと定数は以下の通り: boolean isCase(Object candidate) int getDirective() void setDirective(int directive) sta…
今回はクロージャを込み入った方法で使う際に意識しておくべき3つのオブジェクト this (thisObject) owner delegate とそれに関するメソッドを見ていきます。 まぁ、この記事読んだところで、結局よぉ分からんってオチになりそうだけど。this, owner, and de…
前の記事で Closure オブジェクトを 実行するメソッド call(), run() を見ましたが、それの続編として Closure クラスに定義されている他のメソッドを使ってみます。 今回はパラメータ(引数)に関連するメソッドです。目次 パラメータ情報 getMaximumNumber…
なんか今更な記事ですが、Groovy の Closure オブジェクトを実行する方法をあれこれと試行。Closure クラスに定義されている実行用のメソッドには以下のようなものがあります: Object call() Object call(Object arg) Object call(Object... args) void run…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Initialization On Demand Holder パターン。 このパターンは static フィールドの遅延初期化 (lazy initializa…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Double-checked Locking パターン。 このパターンは、複数のスレッドからアクセスされる可能性のあるフィールド…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Active Object パターン。 これは別名 Actor パターンとも呼ばれるので、GPars の Actor を使っての実装を試み…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Specific Storage パターン。 このパターンは java.lang.ThreadLocal を使えば実装できます。 あんまり …
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Two-Phase Termination パターン。 このパターンでは、スレッドを終了したいときにいきなり止めるのではなく、…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Future パターン。 このパターンでは、「引換券を、お先にどうぞ」と言うのが的を射ているように、まだ終わって…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Worker Thread パターン。 Worker Thread パターンも java.util.concurrent パッケージのクラスを使えば実装す…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Per-Message パターン。 このパターンは、メッセージ(リクエスト)が送られてきたら、それに対して1つ…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Read-Write Lock パターン。 このパターンも Java SE 5 で導入された java.util.concurrent パッケージ(正確に…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Producer-Consumer パターン。 Producer-Consumer パターンはやるべき仕事を見つけることとその仕事を実行する…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Balking パターン。 前回見た Guarded Suspension パターンでは、(キューが空になったり空きができたりなどの…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Guarded Suspension パターン。 Guarded Wait, Spin Lock などとも呼ばれるそうです。このパターンは java.util…
『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、の続き。 今回は Immutable パターン。 状態が変わらないオブジェクトは、いつどのようにスレッドからアクセスされても…
以前、Single Thread Execution パターンを GPars の Actor を使って書き換えてみました。 そこでは門の役割をする Gate クラス自体を Actor のサブクラスである DefaultActor を使ってスレッドセーフな実装にしていました。 ただし、クラスをスレッドセーフ…
Groovy でのマルチスレッド・プログラミングを練習するために、『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』にあるマルチスレッド・プログラミングのデザインパターンを Groovy/GPars で書いてみます。今回は「Single Thread Execut…