倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy

Groovy JDK? It's GDK! (File 編2) 文字列・文字ストリーム

前回に続き、今回は GDK が java.io.File オブジェクトに追加する文字列・文字ストリーム関連のメソッドを見ていきます(目次)。 前回のバイト配列・バイトストリーム関連のメソッドよりよく使うかと思います。文字はデータ的に見れば「バイト + 文字セット…

Groovy JDK? It's GDK! (File 編1) バイト配列・バイトストリーム

Groovy では GDK の機能によって java.io.File クラスにいろいろメソッドが追加されていて、ファイル入出力が非常に手軽になっています。 その反面、追加されているメソッド数が多いため、どんなメソッドがあるのか把握し切れていない人も多いのではないでし…

() で call() メソッドが呼ばれないこともあるようで。

Closure 型のプロパティを使って class Main{ def closure = { println 'This is closure.' } } def main = new Main() main.closure() とやると普通に実行できて「This is closure.」と表示されます。 Groovy ではオブジェクトに対して () を付けると call(…

Groovy スクリプトを実行するバッチファイル

こちらの記事で、Groovy をインストールしていない環境で Groovy スクリプトを実行する方法が書かれてました。 この方法では、スクリプトの実行に必要な Groovy と Ivy*1 の Jar ファイル自体は実行者に用意してもらう必要がありました。最近、Clojure の勉…

Groovy でのコンストラクタあれこれ

今さらかも知れませんが、Groovy でコンストラクタを実装する方法をあれこれ試してみました。 今回試したのは以下のような方法です: 基本 デフォルト・コンストラクタ 名前付き引数 コンストラクタ定義 アノテーションによる AST 変換 @InheritConstructors…

拡張モジュールを試してみる

以前に、既存のクラスに対してメソッドを追加するメタプログラミングの1つの方法として「マジック・パッケージを試してみる」ってことをやってみました。 この方法では、メタクラスを使う方法に比べて「動的にメソッドを追加する処理を実行する必要がない」…

Clojure のマクロって Groovy で書くとこんな感じじゃないの?

Clojure やっててマクロのあたりの構文クォート、アンクォート、スプライシング・アンクォートあたりが全然分かんなかったので、無理矢理 Groovy っぽく解釈してみました。 サンプルの Groovy コードはかなり力ずくで、(動作はするけど)実際に使えるコード…

Closure クラスの API を使ってみる (7) : メモ化 memoize()

今回はクロージャのメモ化 (memoize)。 カリー化、トランポリン同様、メモ化も関数型言語では大抵実装されている機能ですね。 メモ化すると「キャッシュするバージョンのクロージャ」が生成されます。参考 「クロージャのメモ化」 「Groovy v1.8の新機能をサ…

Closure クラスの API を使ってみる (6) : トランポリン trampoline()

今回はクロージャのトランポリンに関するメソッドを見ていきます。 前回見たカリー化(部分適用)と同じく、トランポリンも関数型プログラミングでは大抵サポートされている機能なようで、それを Groovy に取り入れたって感じのようです。 主な解説は書きの…

Closure クラスの API を使ってみる (5) : カリー化(部分適用?) curry(), rcurry(), ncurry()

今回はカリー化、というか部分適用を行うメソッドを見ていきます。 クロージャのカリー化(部分適用?)とは、あるクロージャに対して予め引数の一部を固定したクロージャを生成する操作です。 拙者は関数型プログラミング初心者なので、カリー化と部分適用…

Closure クラスの API を使ってみる (4) : クロージャの合成 leftShift(), rightShift()

前回までで Groovy 1.7 以前に Closure クラスに定義されていたメソッドは大体使ってみました(幾つか残ってますが)。 1.8から追加されたメソッドは『プログラミングGROOVY』で解説されてるし、ネット上でも記事を見つけられるので、今まで以上に雑な説明で…

Closure クラスの API を使ってみる (3) : 制御構造!? isCase(), directive

今回は Closure クラスに定義されている、制御構造に関するメソッドもしくは制御構造風に使えるメソッドを見ていきます。 今回扱うメソッドと定数は以下の通り: boolean isCase(Object candidate) int getDirective() void setDirective(int directive) sta…

Closure クラスの API を使ってみる (2) : this, owner, and delegate

今回はクロージャを込み入った方法で使う際に意識しておくべき3つのオブジェクト this (thisObject) owner delegate とそれに関するメソッドを見ていきます。 まぁ、この記事読んだところで、結局よぉ分からんってオチになりそうだけど。this, owner, and de…

Closure クラスの API を使ってみる (1) : パラメータ情報 getMaximumNumberOfParameters(), getParameterTypes()

前の記事で Closure オブジェクトを 実行するメソッド call(), run() を見ましたが、それの続編として Closure クラスに定義されている他のメソッドを使ってみます。 今回はパラメータ(引数)に関連するメソッドです。目次 パラメータ情報 getMaximumNumber…

クロージャ実行あれこれ

なんか今更な記事ですが、Groovy の Closure オブジェクトを実行する方法をあれこれと試行。Closure クラスに定義されている実行用のメソッドには以下のようなものがあります: Object call() Object call(Object arg) Object call(Object... args) void run…

Groovy で Initialization On Demand Holder パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Initialization On Demand Holder パターン。 このパターンは static フィールドの遅延初期化 (lazy initializa…

Groovy で Double-checked Locking パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Double-checked Locking パターン。 このパターンは、複数のスレッドからアクセスされる可能性のあるフィールド…

Groovy で Active Object パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Active Object パターン。 これは別名 Actor パターンとも呼ばれるので、GPars の Actor を使っての実装を試み…

Groovy で Thread-Specific Storage パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Specific Storage パターン。 このパターンは java.lang.ThreadLocal を使えば実装できます。 あんまり …

Groovy で Two-Phase Termination パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Two-Phase Termination パターン。 このパターンでは、スレッドを終了したいときにいきなり止めるのではなく、…

Groovy で Future パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Future パターン。 このパターンでは、「引換券を、お先にどうぞ」と言うのが的を射ているように、まだ終わって…

Groovy で Worker Thread パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Worker Thread パターン。 Worker Thread パターンも java.util.concurrent パッケージのクラスを使えば実装す…

Groovy で Thread-Per-Message パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Thread-Per-Message パターン。 このパターンは、メッセージ(リクエスト)が送られてきたら、それに対して1つ…

Groovy で Read-Write Lock パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Read-Write Lock パターン。 このパターンも Java SE 5 で導入された java.util.concurrent パッケージ(正確に…

Groovy で Producer-Consumer パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Producer-Consumer パターン。 Producer-Consumer パターンはやるべき仕事を見つけることとその仕事を実行する…

Groovy で Balking パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Balking パターン。 前回見た Guarded Suspension パターンでは、(キューが空になったり空きができたりなどの…

Groovy で Guarded Suspension パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、今回は Guarded Suspension パターン。 Guarded Wait, Spin Lock などとも呼ばれるそうです。このパターンは java.util…

Groovy で Immutable パターン

『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』に載っているデザインパターンを Groovy/GPars で書こうシリーズ、の続き。 今回は Immutable パターン。 状態が変わらないオブジェクトは、いつどのようにスレッドからアクセスされても…

Groovy で Single Thread Execution パターン その2

以前、Single Thread Execution パターンを GPars の Actor を使って書き換えてみました。 そこでは門の役割をする Gate クラス自体を Actor のサブクラスである DefaultActor を使ってスレッドセーフな実装にしていました。 ただし、クラスをスレッドセーフ…

Groovy で Single Thread Execution パターン その1

Groovy でのマルチスレッド・プログラミングを練習するために、『増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編』にあるマルチスレッド・プログラミングのデザインパターンを Groovy/GPars で書いてみます。今回は「Single Thread Execut…