タグ

Groovyに関するnobuokaのブックマーク (13)

  • GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog

    この両者は、似ているようでいて、基的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型のインスタンス MethodHandle, invokeDynamic.. 型推論の根拠 Closure<T>のTで返り値、@ClosureParamsで引数 FunctionalInterface(SAM型) 記法 { 引数 -> 体 } { 体 } {-> 体 } (引数) -> { 体 } (引数) -> 式 () -> { 体 } 暗黙の動的なthis delegateにより実現 - 性能 ローカル変数をenclosingするため間接参照にするためのオーバーヘッドあり 性能上のオーバーヘ

    GroovyのクロージャとJava8のlambda式の違いについて - uehaj's blog
    nobuoka
    nobuoka 2015/04/20
    『クロージャ引数を型推論させたいとき、つまり静的 Groovy をしつつ型を省略したいときは、@ClosureParamsを使う』 これ今まで知らんかった。 便利そう。
  • Jenkins Workflow Pluginを使ってみる - GeekFactory

    先日リリースされたJenkins Workflow Plugin 1.0を使ってみました。年明けのJenkinsユーザカンファレンスで詳しい発表があると思うので、今から楽しみですね! Workflow Pluginでできること Workflow Pluginを使うと、Jenkinsジョブの動作をGroovyで記述することができて、さらにユーザとのインタラクションを差し込むことも可能です。これはデプロイメントパイプラインの実装に便利そうです。 また、リポジトリからチェックアウトしたGroovyスクリプトを読み込めるので、Travis CIやCircle CIのようにビルド設定をリポジトリで管理できます。開発現場でJenkinsを使い込んでいくと、いろんな人がジョブ設定をいじって荒廃していくことが多いので、ビルド設定をリポジトリで管理できることは大きなメリットがあると思います。 (と偉そうに書

    Jenkins Workflow Pluginを使ってみる - GeekFactory
    nobuoka
    nobuoka 2014/12/22
    ほー、良さそう。
  • JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory

    JDK 7u65/8u11以降にはバイトコード検証の不具合 JDK-8051012 があります。Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。 Gradle SSH Pluginでもコンストラクタ内でsuper()を実行するコードがあり、JDK 7u65/8u11以降で正常に動作しない問題があります。最近のJDKで不具合が修正されているか確認してみたのですが、やはり動作しませんでした。結果は以下の通りです。 成功 7u60-b19 失敗 7u65-b17 失敗 7u67-b01 成功 8u5-b13 失敗 8u11-b12 失敗 8u20-b26 残念ながら、GROOVY-6951 のスレッドによると8u40まで待つしかないようです。 なお、Travis CIでは当該の不具合に対する暫定対

    JDK 7u65/8u11以降に存在するバイトコード検証の不具合 - GeekFactory
    nobuoka
    nobuoka 2014/09/29
    『Groovyでは、 GROOVY-6951 で報告されているように、コンストラクタ内でsuper()やthis()を使うと実行時エラーが発生します。』 まじか…。
  • @DelegateでJavaバージョンの差異が顕在化するケース - GeekFactory

    JDK 8でビルドしたクラスファイルをJDK 7で実行するとClassNotFoundExceptionが発生する事象でハマったのでメモ。結論からいうと、ソースコードでJava 8に固有のクラスを直接参照していなくても、@Delegateによって間接的に参照されるケースがあります。 前提 JDK 8でのコンパイル時にsource, targetのバージョンを指定しているものとします。 そうしないと、JDK 7でクラスファイルを読み込んだ時に以下のエラーが発生します。 Exception in thread "main" java.lang.UnsupportedClassVersionError: Main : Unsupported major.minor version 52.0 Gradleでは以下の2行を書くだけでOKです。 sourceCompatibility = JavaVe

    @DelegateでJavaバージョンの差異が顕在化するケース - GeekFactory
    nobuoka
    nobuoka 2014/09/23
    Groovy コードをコンパイルする際、JDK 8 を使って Java 7 向けにコンパイルしても @Delegate アノテーションを使ってると期待通り動作しないことがあるみたい。 気を付けよう。
  • GEP 10 - Static compilation - Groovy JSR - Codehaus

    Abstract: Static compilationThis GEP introduces an experimental new feature in the language known as static compilation. Static compilation can be used when the dynamic features of Groovy are not necessary and that the performance of the dynamic runtime is too low. The reader must understand that :we do not plan to change the semantics of regular Groovywe want static compilation to be triggered ex

    nobuoka
    nobuoka 2014/08/24
    Groovy の静的コンパイル機能のこと知らなかったなー。 CompileStatic アノテーションとかあるんだね。
  • Groovyのtraitを使い倒す! - uehaj's blog

    JGGUG G*Workshopに久々に参加しまして、GroovyのTraitについて、以下を話してきました! Introduce Groovy 2.3 trait from Junji Uehara 盛況でした。いくにんかAndroid開発をされている人もいらっしゃったようで、Groovy on Androidが注目されているのも理由かもしれませんね。 http://togetter.com/li/682540 http://jggug.doorkeeper.jp/events/11365

    Groovyのtraitを使い倒す! - uehaj's blog
    nobuoka
    nobuoka 2014/06/21
    Groovy 2.3 に trait が導入されたのかー。
  • iOSのSwiftとAndroidのGroovy - Rejasupoem

    WWDCでSwiftが発表されてTLが賑わっていますが、時を同じくして6/2〜6/4に開催されたGR8Conf Europe 2014でGroovyのAndroidサポートが発表されました。 groovy-coreに取り込まれた差分: Raw modifications to run Groovy on Android by melix · Pull Request #436 · groovy/groovy-core さっそくAndroidアプリをGroovyで書いてみた 以前RxJavaのために書いたサンプルプロジェクトがあったので、Groovy化してみました。 と言っても、GroovyはJavaに完全な上位互換があるのでそのままでも動くので、Groovyっぽいシンタックスを使ってみました。 class ComposeMessageActivity extends Activity {

    nobuoka
    nobuoka 2014/06/07
    Swift さんのことちゃんと調べてなかったけど Groovy さんと近しいっぽい。
  • Groovy on Androidのサンプルを動かす - ギークに憧れて

    2014-06-05 Groovy on Androidのサンプルを動かす Groovy 2.4でのAndroidサポートがいきなり発表されたので、とりあえずサンプルを動かしてみる。 スライドはこちら。 https://speakerdeck.com/melix/groovy-on-android サンプルはこちら。 https://github.com/melix/gr8confagenda Groovy 2.4はSNAPSHOTなのでローカルでビルドしてMavenリポジトリにインストールする。 git clone https://github.com/melix/groovy-core --branch feature/grooid cd groovy-core/ ./gradlew -PskipIndy=true install それなりにかかるので待つ。 インストールし終わったらg

    nobuoka
    nobuoka 2014/06/06
    Groovy で Android アプリ開発!!!
  • GroovyConsoleの改善と、その背景にあるワザ(@ThreadInterrupt AST変換) - uehaj's blog

    @tyuki39さんの groovyconsoleってスクリプトの実行を中止出来ないのかな?組み合わせパターンを間違って多めに作ったときに固まって困る。 2011-04-16 21:58:38 via Teewee のつぶやきを切っ掛けとして、Groovy 1.8のGroovyConsoleを試してみて気づいたのですが、以前(1.7.x)のGroovyConsoleでは、無限ループ、もしくは長時間走行するスクリプトを途中で止めることができないことがありました。 GroovyConsoleには上のように「赤いバツ」のボタンがあって、これを押すと、走行中のGroovyスクリプトのスレッドに対しておそらくThread#interrupt()が発行されるのですが、ご存知のようにJavaにおけるスレッド外からの「スレッド止め」は鬼門であり、安全に止める方法はもともとありませんでした。Java的には「

    nobuoka
    nobuoka 2014/03/01
    おおお、これは便利。 ユーザーが入力した処理を実行するときにタイムアウトできるようにしたかったからすごく参考になった。
  • Groovyでデータベース操作(GroovySQL) - No Programming, No Life

    GinAのデータベースの章*1に書かれていることをまとめておこうと思う。 ここに書かれている内容はSQLをある程度理解している方を対象としています。また、JavaDB操作を行ったことがあると理解が早まります。 DBに接続 まずは、JDBCドライバを使ってDBに接続する。ひとまず簡単な方法はファクトリメソッドを使う方法。groovy.sql.Sql#newInstance() を利用する。戻り値はgroovy.sql.Sqlインスタンス。 def db = Sql.newInstance( 'jdbc:〜〜', // DB接続文字列 'ユーザ名', // ユーザ名 'パスワード', // パスワード 'jdbcドライバクラス' // JDBCドライバ ) データの挿入・更新・削除 データの挿入・更新・削除を実行する方法としては、groovy.sql.Sql#execute(statment

    Groovyでデータベース操作(GroovySQL) - No Programming, No Life
  • Logdown - Site Maintenance

    Sorry for the inconvenience we’re performing maintenance. — Logdown

    nobuoka
    nobuoka 2013/12/26
    Gradle のビルドスクリプトの文字エンコーディングの指定は gradlew.bat でやればいいのか。 なるほど。 http://uehaj.hatenablog.com/entry/20090815/1250316330 も参考になる。
  • コメントに何を書いてもいい」と思うのは、/**/については正しいが、//については正しくない - uehaj's blog

    Groovyで「//」で日語のコメントをつけていたところ、ソースをMacOSからWindowsに持ってきたらシンタックスエラーで動かなくなった。 なんでかなーと思ったら原因は以下の通り、 元のソースはUTF-8で書いてあった つまり全角文字1文字3バイト 元のソースの改行コードはLFだった。 コメント行の行末に全角文字があった。 このとき、WindowsのデフォルトエンコーディングはShift_JIS(正確にはMS932)なので、UTF8の3バイトをShift_JISで解釈しようとして、まず頭の2バイトは化けた。まあコメントだから化けても別にそれはいい。問題は、Shift_JISのデコーダが、残る1バイトと、//コメント行末のLFをペアでって、1文字と解釈してしまうこと。この結果、改行が消え去ることになり、続く一行がコメントの一部として解釈され、シンタックスエラーでした。 この問題はJ

    コメントに何を書いてもいい」と思うのは、/**/については正しいが、//については正しくない - uehaj's blog
    nobuoka
    nobuoka 2013/12/25
    Gradle を使ってて、文字コード UTF-8 かつ改行コード LF の build.gradle で行コメントの次の行までコメント扱いされてしまう問題が発生して困ってたのが今日のつらかった出来事です。
  • Groovy - Operator Overloading

    nobuoka
    nobuoka 2013/09/23
    Groovy の演算子とメソッドの対応。
  • 1