uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

groovy

1.8.1以降をキャッチアップするシリーズその2、複数クロージャによる多段groupBy

あけましておめでとうございます。書き初めならぬ、エントリ初め。今年もよろしくお願いします。みなさまにとって飛躍の年になりますように。さて、Groovy 1.8.1以降で追加されたGDKメソッド(主にコレクション関係)を解説するシリーズ第2弾、「複数クロージ…

1.8.1以降をキャッチアップするシリーズその1、非破壊的sort/unique

大晦日も押し迫ってきたところで連続エントリを書き始めて年の瀬の区切りを悪くする試みです。本記事から続く一連のエントリでは、Groovy 1.8.1で追加されたGDKメソッド(主にコレクション関係)について解説してみます。書籍「プログラミングGROOVY」を執筆し…

Groovyの疑似デバッガgdb

G* Advent Calendarの22日目の@uehajです。Groovy関係のツール紹介ということで、Groovyの疑似デバッガgdbの紹介。gdbといってもGNUデバッガではありませんよ。gdbの説明や入手はこちら。これは、一般的なデバッガというより、コード上の特定の場所(com.gdb.…

Java Developer Workshop #2にてGroovyについて話すことに

来る12月1日に開催される、日本オラクル株式会社主催の「Java Developer Workshop #2」にてGroovyについて話すこととなりました。わりとGroovy紹介的な内容ですが、Spring One 2GX 2011に参加して(今日が最終日@シカゴ)感じた「熱気」みたいなものが伝えられ…

さらにもう一つの静的Groovy…Grumpyプロジェクト

旧聞に属するのですが、8月の頭ぐらいからGroovy-devのメーリングリストで、Groovyコアコミッターたち(の一部)による「"Grumpy"プロジェクト」なるものが始動していたことが話題になってました。 議論は、プロジェクトリードのGuillaume Laforge氏の休暇中に…

第18回 G*ワークショップ周知

http://kokucheese.com/event/index/16071/ より 〜〜 今回のG*ワークショップは「G*なGUI祭り」として、G系デスクトップアプリケーション技術をフィーチャーしたセッションをお届けします。Grailsと並びG系を代表するフレームワークであるGriffonと、JavaFX…

static変数にも@Fieldを指定できる

Groovyでstatic変数を@Fieldにしたくなる時があります(@Fieldについてはこちらを参照)。たとえば、 class Hoge { def method() { if (verbose) { .. } } } verbose = cli.parse(args).verboes はエラーになります。なぜなら、バインディング変数は他のクラス…

GVM: GroovyでJavaVMを書いたよ

前置き さてやっと発売日となりました、私も著者の一人として執筆に参加している「プログラミングGroovy」ですが、ご覧になった方もいらっしゃると思います。プログラミングGROOVYposted with amazlet at 11.07.06関谷 和愛 上原 潤二 須江 信洋 中野 靖治 …

Groovyなどのソースコードのビジュアライゼーションの動画

昨日の記事で、Groovyなどのソースコード変遷のビジュアライゼーション動画について言及しましたが、見つけましたのでご紹介します。これらはSVNなどのバージョンコントロールシステムのコミットログなどから、Gourceというツールで生成されたもののようです…

メタプログラミング機構の考古学

Groovyのメタプログラミング機構にはMetaClassがあります。MOPってやつですね。これがいつ導入されたのか気になって、調べてみました。codehausのリポジトリから入手できるうちで探した限り最古のgroovyのソース(11-May-2004 14:59 211K)をダウンロードして…

@Fieldかわいいよ@Field

はじめに 息切れ直前企画「プログラミングGroovyの発売日まで1日1エントリ書くぞう」の第4回目です。今いちネタがないので、先日JGGUG G*WorkshopでGroovy 1.8の新機能について紹介した際の補足として、新規AST変換の1つ@Fieldを解説してみたいと思います。 …

groovyConsoleでお絵書き

本日、「プログラミングGroovy」の見本本が届きました。青がいい感じ!さすがプロの手腕だわ(最初はGroovyな感じじゃなくてCoolすぎる、とか文句言ってたのは内緒)。うちの奥さんは、一目見るなり、表紙のペンギンが気に入りました。ってそこか。 ということ…

AST変換の途中結果をGroovyソースに戻してみよう(ファイルで)

Groovy AST Browser Improved!の記事に書いたように、Groovy 1.8のGroovy ConsoleはAST変換の過程を見ることができるのです。では、ファイルでスクリプトのコードが(Groovy Consoleからコピペせずに)欲しいときはどうすれば良いかというと、以下のようにしま…

G*Workshop 16th発表、Groovy 1.8の新機能

JGGUG G* Workshop 16thにて発表してまいりました。以下、発表資料です。 Groovy 1.8の新機能について View more presentations from Junji Uehara 内容は、準備不足の感もありますが、私の主観で便利なところ、役にたつところ、をメリハリつけて紹介してみ…

G*ワークショップ16th

来週末の6/17(金)に、JGGUGでGroovy 1.8について話します。よろしければどうぞです。 http://kokucheese.com/event/index/12173/ 日本Grails/Groovyユーザーグループの2010年度総会を開催します。総会に続いては、恒例のG*ワークショップを開催し、G*ワール…

シナトラといえばスペシャルローリングサンダー

Ratpackというものがあるそうで。こちらの記事によれば、 Compared to Grails, it's a more bootstraped experience but is useful for small projects. Just as Sinatra coexists with Rails, Ratpack can coexist with Grails. Rubyの軽量Webフレームワー…

流れるようにGEP3(Fluent GEP3)

流れるような(フルーエント)インタフェースは、Groovy 1.8の新規機能である「拡張コマンド式(GEP3)」と親和性が高いのではないかと思い、S2JDBCチュートリアルを参考にして、具体的には上に含まれるテストコードをGEP3でいくつか書きなおしてGroovyから呼び…

GroovyにおけるProject Coin相当拡張について

id:fumokmmさんの日記で、「5分で理解するProject Coin」というすばらしい記事があり、Java 7の言語に関連する拡張がすぐに良くわかるように紹介されています。(私もしばらく前に記事をかきました。)Groovyでもじつは、Coinの文法拡張について細かいものも…

Groovy AST Browser Improved!

昨日のブログでも言及しましたが、Groovy 1.8.0では、Groovy ConsoleのASTブラウザ([Script]-[Inspect AST]で呼び出す)が進化して、AST変換前後のASTを、Groovyコードとして表示してくれるようになりました。 上は下のコードをInspect ASTしてみたものです。…

GroovyConsoleの改善と、その背景にあるワザ(@ThreadInterrupt AST変換)

@tyuki39さんの groovyconsoleってスクリプトの実行を中止出来ないのかな?組み合わせパターンを間違って多めに作ったときに固まって困る。2011-04-16 21:58:38 via Teeweeのつぶやきを切っ掛けとして、Groovy 1.8のGroovyConsoleを試してみて気づいたのです…

println -1やprintln[1]はなぜエラーなのか

Groovyで、println -1やprintln[1]を、println(-1)やprintln([1])のつもりで書いても以下のようなエラーになります。 $ groovy -e 'println -1' Caught: groovy.lang.MissingPropertyException: No such property: println for class: script_from_command_l…

java -jarで起動できるGroovy

http://jira.codehaus.org/browse/GROOVY-2128によれば、Groovy 1.8以降では java -jar /tool/groovy-1.8.0-rc-3/embeddable/groovy-all-1.8.0-rc-3.jar hoge.groovyのようにGroovyスクリプトやGroovyのクラス定義を起動できるようになります。beta4でFix-Cl…

GEP3のさらなる拡張

Groovyの1.8のどこか(たぶんbeta3)から、代入式右辺のメソッド呼び出しにおけるカッコの省略ができるようになっています。 home =System.getProperty "groovy.home" foo = System.getProperties().setProperty 'foo', 'bar' // 1.7ではエラーだが1.8の新しい…

クロージャにとってdelegateとは何か

短い答え 短い答え: クロージャにとって、delegateってのは、変更可能なthisですよ。 長い答え メソッドにとってthisとは何だったか まず、thisとは何だったかを確認します。thisの中核的な意味は、インスタンスメソッドから見て自分自身が所属するインスタ…

Builderとは何か

Builderというのは、Groovyのとても特徴的な機能だと思います。たとえば、MarkupBuilder。 new MarkupBuilder().root { a( a1:'one' ) { b { mkp.yield( '3 < 5' ) } c( a2:'two', 'blah' ) } } こんなんを書くと、 <root> <a a1='one'> <b>3 &lt; 5</b> <c a2='two'>blah</c> </a> </root> こんなのが表示されま…

Groovy 1.8 modularizationとは何か

Groovy 1.8の新機能として、「モジュール化」というのがちらほら出て来ています。たとえば、1.8.0-beta1のリリースノートには、 .. and we're also seizing this opportunity to work in parallel on making Groovy more modular. Some early work towards m…

GROOVY_HOMEを設定しない方が良い理由

Why You Should Never Set GROOVY_HOMEという記事があり、GROOVY_HOME環境変数を設定してしまうと、複数のGroovyをインストールしてるときとか、あるいはGrailsとGroovyの両方をインストールしてるときに邪魔でしかないので、GROOVY_HOMEは設定せず、PATHにG…

Groovyではprivateが無視されるというのはバグとみなされている

これもトリビア。現在のGroovyはprivateを無視します。なのでjava.lang.String#valueの値を変えることも容易にできます。試験に便利なときもあるかもしれません。しかしこの機能(?)は古来からバグとみなされてます。いにしえのjsr-03では禁止されていたらし…

Groovyの生産性

GroovyとJavaとの生産性の比較について、groovy-userのMLで報告してた人がいたので紹介。 groovy/javaの混合言語のプロジェクトで、Javaコードをgroovyにコンバートすることをやってた。たいていは、拡張したりバグ修正したり必要に応じてリファクタリングも…

GroovyはPure Javaじゃない

トリビア?です。GroovyはPure Javaじゃないんですね。 $ jar tvf /tool/groovy-1.7.3-bin/lib/jline-0.9.94.jar | grep dll 16069 Fri Feb 22 03:02:14 JST 2008 jline/jline32.dll 48128 Fri Feb 22 03:02:14 JST 2008 jline/jline64.dll groovyに同梱され…