Groovy 2.2以降、@BaseScriptアノテーションというのが導入され、Scriptの基底クラスを指定することができる*1ようになりました。 これは主目的としては、専用目的の便利機能追加・DSLの作成だと思いますが、単にscriptをインクルードするのにも使えます。 例えば、以下の「OtherScript.groovy」をクラスパスの通ったところか、あるいはカレントディレクトリに配置しておきます。 // OtherScript.groovy def methodOfOtherScript() { "i'm methodOfOtherScript1" } def methodOfOtherScript1() { "i'm methodOfOtherScript2" } println "this is otherScript!" a=3 これを呼び出す、mainscript.gro
(訂正2014/4/17)以下の記事ではGroovy 2.3のtaritはスタッカブルには使えない、と書いておりますが、以下によれば次のベータ(Groovy 2.3-beta-3かな)ではスタッカブルトレイトが利用可能になるようです。 次βでGroovy 2.3のtraitはスタッカブルになるようですヤター RT @CedricChampeau: @tim_yates yes it is. See the other examples in the test case, stackable traits— uehaj (@uehaj) April 17, 2014 先の記事ではGroovy 2.3のtraitをかるく紹介してみました。 Scalaの比較も試みましたが、なにしろScalaのtraitをあんまり知らないので、「Groovyのtraitにある機能に限っての、Scalaの対応物と比
GroovyのCategoryを使って、ファイルパスを直感的に書く仕組みを導入してみます。 Fileのコンストラクタには親ディレクトリとファイル名を渡すことができますが、ディレクトリの階層が深くなると読みづらくなります。 例えば、baseDirの下のinnerDirの下のfileNameというファイルにアクセスするコードは下記のようになります。 def targetFile = new File(new File(baseDir, innerDir.name), fileName) GroovyのCategoryを使うと、既存のクラスに新しいメソッドを追加できます。 この仕組みを応用すると、スラッシュ区切りで直感的にファイルパスが書けるようになります。 先ほどのコードは下記のように書けます。 use(FileDivCategory) { def targetFile = baseDir /
Groovy 2.3.0-beta-1とbeta-2が出たので新機能traitをかるく触ってみました。 注意! 以下は現時点で2.3.0-beta-1と2の振舞いとドキュメントを調べた限りの情報です。正式リリースに向けて変更される可能性があります。 関連記事 Introduce Groovy 2.3 trait Groovy 2.3のtraitをもうちょっと調べてみるついでにScalaのtraitを理解する - uehaj's blog traitの概要と目的 Groovyのtraitは、一言で言って「実装の多重継承」を可能とする仕組みです。詳しくはこちらの本家ドキュメント(英語)をどうぞ。 GroovyおよびJava 7までのJavaでは、インターフェースは多重継承することができましたが、クラスは多重継承できませんでした。実装、すなわちメソッド本体の定義や、非public static
Groovy2.3.0-beta-1がリリースされましたね。 目玉としてはやはりtraitでしょう。 今までのMetaClassによるメソッドの動的探索パスをいじる系の機能で似たようなことはできましたが、何かと限界(複数スレッドにおける動作の保証とかかなり泥臭い感じだったり、一度動的メソッドを追加すると取り除くのが大変だったり)がありましたが、それらを超えるために静的ソリューションとしてtraitが実装されました*1。 ドキュメントがすごくわかりやすくて、サンプルコードを上から順に読むだけで少なくともどのように使えるかは難なく理解できるでしょう。 http://beta.groovy-lang.org/docs/groovy-2.3.0-SNAPSHOT/html/documentation/core-traits.html 最初の方を読んでるとJava8のインタフェース+デフォルトメソッ
標準出力 System.out.println() がきちんと実装できているかをテストする必要がありました。 どうやってテストすればいいんだろうと調べてみました。 JUnit でテストする方法 次のサイトがとても参考になりました。色々な方法が紹介されています。 ・標準出力に結果を出すプログラムをJUnit 4.1でテストする方法 - 結城浩のはてな日記 Spock でテストする方法 今は Spock でテストしていますので、先ほどのサイトを参考にしながら作ってみました。 class SystemOutTest extends spock.lang.Specification { def "標準出力にきちんと文字列が出力される"() { def savedSystemOut = System.out def printStream = Mock(PrintStream) System.out
米国開催のJavaOneカンファレンスで恒例の人気セッションとなっている「スクリプト・ボウル」というのがあります。Java VM上で動作する言語同士のガチ勝負で、コード例とか、技術力とかいろいろな側面からパネルセッションでバトルして、その年勝者を決める、というものです。 自分では残念ながら直接見たことはないので想像ですが、「朝まで生テレビ」で言語バトルするようなものです。違うか。 エンターテイメント要素も多々あるでしょうし、人気とか「情熱」みたいなのも評価されるかもしれないし、コミュニティの「動員力」とかの要素もひょっとしたらあるかもしれませんね。そういうものも含めて、おもしろい勝負なのではないかと思います。もちろん技術者同士でやってるので、技術的なおもしろみとかもあるでしょう。プレゼンのうまさとかもあるでしょう。 んでその過去の結果をまとめてみました。 年候補結果 2008Scala,G
What is RelProxy? RelProxy has three principal features: 1) A class reloader in runtime from source code in Groovy or Java. Similar to JRebel but not so sophisticated... and cheaper. 2) A scripting environment for Java as a scripting language, including "shell scripts" coded in pure Java. 3) JSR-223 Java Scripting API support for "the scripting language named Java." RelProxy was born to provide a
Groovyを使って、簡単にHTTPアクセスができないかなぁと思い、ビルダーが何かあるんだろうと調べたところ、やっぱりありました。 HTTPBuilder http://groovy.codehaus.org/modules/http-builder/ みなさんご存知のApache HttpClientの、ラッパーみたいなもののようです。 HttpClient http://hc.apache.org/httpcomponents-client-ga/ 使い方は、各種ドキュメントにGETやPOSTの例などがあるので、とりあえずはそちらを参照してください。 Simplified GET Request http://groovy.codehaus.org/modules/http-builder/doc/get.html Simple POST http://groovy.codehaus.
最近、ちょっと身の回りでコマンドライン引数の処理が話題に挙がりまして、ちょっとJava系でどんなのが使えるのか調べてみました。 ちなみに、もともと話が出たのはJavaでしたが、このエントリでは加えてGroovyとScalaも書きたいと思います。 実行するコマンドのお題は、以下とします。 指定されたメッセージを、指定された回数表示するコマンドLoopEchoを実装する 「-m」オプション(ロングオプション「--message」)で表示するメッセージを指定し、必須項目とする 「-c」オプション(ロングオプション「--count」)で表示回数を指定し、任意項目とする(デフォルト値:3) Java/args4j このエントリを書く元になった仕事の上では(残念ながら自分が実装するわけではないので)、Commons CLIになったのですが、今回はこちらを使用したいと思います。 args4j : Jav
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く