タグ

ブックマーク / npnl.hatenablog.jp (24)

  • Groovyでリスト内包表記 - No Programming, No Life

    はじめに Groovyにはリスト内包表記が無いなぁと思って書いてみた。 ソース(参照) def listComprehension(list, filter, expr) { list.findAll(filter).collect(expr) } println listComprehension( (0..10).toList(), // 0から10までのリストを渡して {it % 2 == 0}, // 偶数にフィルタして {"<${it * 3}>"} // <数字> みたいにフォーマットした3倍の値を出力! ) みたいな感じで書きますと、 [<0>, <6>, <12>, <18>, <24>, <30>] みたいになります。ジェネレータを複数にするとか面倒なことはしてません。とりあえず。 追記 (2011-07-02) Groovyでリスト内包表記(その2) - No Prog

    Groovyでリスト内包表記 - No Programming, No Life
    waman
    waman 2013/06/11
  • JLineの最小サンプル in Groovy - No Programming, No Life

    はじめに Groovy! (挨拶) 突然ですが、 航海日誌: 2012-01-09: [Scala][Java] JLineの最小サンプル をGroovyでも書いてみました。 JLineは、コンソールアプリケーションにおいてユーザの入力の編集と読み込みを行うJavaライブラリです。 タブ補間、コマンド履歴、パスワードマスキング、キーバインドのカスタマイズ、他のコンソールアプリケーションをつなぐパススルー処理などの機能があります。 JLine - Java console input library プロジェクト語トップページ - SourceForge.JP Download Groovyの場合、@GrabがあるからDownloadは不要。ここにMaven Repositoryの定義が書いてあるので、これをもとにスクリプトの先頭にGrab定義を書けばスクリプト実行時に自動でダウンロード

    JLineの最小サンプル in Groovy - No Programming, No Life
    waman
    waman 2013/01/11
  • Groovyで既存クラスのasTypeをOverrideする - No Programming, No Life

    はじめに Groovyでは as演算子 を利用するためには #asType(Class) メソッドを実装すればよい。既存クラスには既に #asTypeメソッド が実装されているため、通常あまりいじることはない(と思われる)のだが、とある事情でいじる必要が出てきた。その際、ちとハマッたのでメモ。 文字列を自作のクラスに as する ちと例が悪いのですが、こないだのポーカーのやつで利用したCardクラスを考える。 お題:ポーカーをGroovyで解いてみた - No Programming, No Life enum Suit { S('♤♠'), H('♡♥'), D('♢♦'), C('♧♣'), def mark Suit(mark){ this.mark = mark } } enum Rank { R2, R3, R4, R5, R6, R7, R8, R9, R10, RJ, RQ,

    Groovyで既存クラスのasTypeをOverrideする - No Programming, No Life
    waman
    waman 2012/07/10
  • Clojureで文字列から動的に関数名を作って実行したいんだが・・・ - No Programming, No Life

    リストの第一要素がシンボルなら関数として起動できるのかな?と思っていたんだがどうも違うらしい。 とりあえず、printlnを例として。(symbol 文字列) でシンボルは作れるらしい。 $ clj Clojure 1.4.0 user=> (symbol? 'println) true user=> (= 'println (symbol (str "print" "ln"))) true でも、実行しても期待の動作をしてくれない。なんでだろう。 user=> (println "hello") hello nil user=> ((symbol (str "print" "ln")) "hello") nil user=> (if true "yes" "no") "yes" user=> ((symbol "if") true "yes" "no") ArityException W

  • Groovyのチートシート - No Programming, No Life

    当記事は、Groovyのチートシート | Think Twiceへ移管しました。

    Groovyのチートシート - No Programming, No Life
    waman
    waman 2012/05/09
  • ClojureのREPLの終了方法 - No Programming, No Life

    ハッカーと画家を読んでたらLispやりたくなってきたのでClojureをいじり始めてみました。とりあえずプログラミングClojureを片手にREPL(対話モード)で遊んでいたんですが、終了方法が書いてなかったのでCtrl+Dなどで終了させていました。 ググってみたところ、こちらに答えがありました。 「30」と表示されます。REPLを終了させるためには、 (. System exit 0) と入力します。Systemクラスのexitメソッドに引数0を付けて実行するということみたいです。 Clojureを入れてみる - 自称スーパーハッカーの適当なプログラミング雑記等 なんとまさかのSystem.exit(0)ですか。もうちょっと簡単なエイリアス的なものはないんでしょうかねぇ…ということでこんなの書いてみたらいけました。 user=> (defn exit [] (. System exit

    ClojureのREPLの終了方法 - No Programming, No Life
  • GroovyなJDK、それがGDK(java.util.List編) - No Programming, No Life

    このシリーズの一覧はこちら はじめに GroovyにはJavaの標準API(JDK)を拡張したGroovy JDK(GDK)があります。大量の便利メソッドが追加されており、これを使いこなすだけでも相当のことができるようになります。このシリーズでは毎回1クラスずつ各メソッドの使用例をサンプル付きでご紹介していきたいと思います。 「今回は java.util.List です」 ListはMap、Closureと並んで、もはやGroovyにとっては無くてはならない存在と言っても良いでしょう。 ソースコードの至る所で利用されており、シンタクスシュガーとして [] という初期化記法も用意されいます。 Listには数多くのリスト処理用のメソッドが追加されており、非常に便利に利用することが出来るのが特徴の一つです。 中には#takeや#drop、#headや#tailなど、関数型言語のリスト処理でおなじ

    GroovyなJDK、それがGDK(java.util.List編) - No Programming, No Life
    waman
    waman 2011/07/30
  • Groovy v1.8.1とv1.9-beta-1の新機能をサクっと紹介するよ - No Programming, No Life

    このシリーズの一覧はこちら はじめに 2011-07-21にGroovy v1.8.1とv1.9-beta-1が同時リリースされたようなので、その新機能の一部をサクっと紹介します。 1. プリミティブ型演算のパフォーマンス最適化 割愛*1 2. ストリーミングビルダー(StreamingJsonBuilder) StreamingJsonBuilder (Groovy 1.8.6) JSONペイロードを直接writerに書き出したいとき(そして出力前にデータ構造を修正する必要がないとき)に使えるらしいです。ここでは動作確認としてv1.9-beta-1を利用しました。 import groovy.json.StreamingJsonBuilder import groovy.json.JsonOutput new StringWriter().with { w -> def json = n

    Groovy v1.8.1とv1.9-beta-1の新機能をサクっと紹介するよ - No Programming, No Life
    waman
    waman 2011/07/23
  • 猫にもわかるSwingBuilder「frame」 - No Programming, No Life

    このシリーズの一覧はこちら はじめに 自分のSwing力の無さに愕然としたので、ちょこちょこサンプルを作ってはまとめてゆく。故にちょこちょこ記事は加筆修正されてゆく予定です。 まず何はともあれframeを作らないと始まらないですよね、ということでframeからスタート。 クラス階層 javax.swing Class JFrame java.lang.Object extended by java.awt.Component extended by java.awt.Container extended by java.awt.Window extended by java.awt.Frame extended by javax.swing.JFrame JFrame (Java Platform SE 6) frmaeの実体は javax.swing.JFrame となります。 ドキュメ

    猫にもわかるSwingBuilder「frame」 - No Programming, No Life
    waman
    waman 2011/07/20
    SwingBuilder
  • Groovyで@Categoryを使ってカテゴリクラスを作成する - No Programming, No Life

    @Categoryアノテーションを付けるとそのクラスをカテゴリクラスにできますよというサンプル。この機能はObjective-Cのカテゴリ由来のようです*1。 以前までは第一引数にメソッドを追加したい型をパラメータself*2として付けたstaticなメソッドを宣言してやる必要がありましたが、@Categoryアノテーションを付ければAST変換してくれて簡単にカテゴリクラスの出来上がりという寸法です。いやー便利便利。 @Category(メソッドを追加したい型) class Hoge { // 通常のメソッド宣言 } という形式です。 カテゴリってstaticメソッドは追加する方法はないのかなーと思ってTwitterでつぶやいてみたら@nobeansさんがサクっと教えて下さいました、素敵すぎる。感謝致します*3。 .@fumokmm 強引ですけどこんなのはどうでしょ。つ https://g

    waman
    waman 2011/05/02
    もう static じゃなくていい
  • Groovy v1.8の新機能をサクっと紹介するよ - No Programming, No Life

    このシリーズの一覧はこちら Groovy v1.8リリースノートより。 はじめに 待ちに待ったGroovy v1.8がやっと出ましたね!ということで、Groovy v1.8の新機能をサクっと紹介したいと思います。 Groovy v1.8は結構多くの機能拡張がなされておりますので、サラっと行きたいと思います。 コマンドチェーン(ドメイン固有言語:DSL) Groovy v1.8以前まではトップレベルでのメソッド呼び出しの括弧は省略できませんでしたが、新しいコマンドチェーン機能を使えば括弧なしのメソッド呼び出しが可能になります。 これは、a b c d のように呼び出した場合は実際には a(b).c(d) と同等となるようなことです。複数メソッドやクロージャ、名前付き引数と一緒に機能して、さらに右側に連ねてゆくことができます。 新しい構文でサポートされている例を見てみましょう。 turn le

    Groovy v1.8の新機能をサクっと紹介するよ - No Programming, No Life
    waman
    waman 2011/04/28
    把握しきれん・・・
  • Groovyソースコード斜め読み(その3)「GDKのメソッドはDGM、DGSMに定義されている」 - No Programming, No Life

    このシリーズの一覧はこちら はじめに org.codehaus.groovy.runtime.DefaultGroovyMethods (JavaDoc) org.codehaus.groovy.runtime.DefaultGroovyStaticMethods (JavaDoc) というクラスをご存知でしょうか。実はGDKによって拡張されたメソッドの実態はこのクラスで定義されています。頭文字を取ってDGM、DGSMと呼ばれたりするらしいです*1。名前からも察しが付くと思いますが、DefaultGroovyMethodsの方でインスタンスメソッドが、DefaultGroovyStaticMethodsの方でstaticメソッドが定義されています。 例. String#padLeft では、分かりやすい例としてString#padLeftを取り上げてみましょう。 String#padLef

    Groovyソースコード斜め読み(その3)「GDKのメソッドはDGM、DGSMに定義されている」 - No Programming, No Life
    waman
    waman 2011/04/27
    自分では追加できなさげ? まぁ、メタクラス使えばいっか。
  • 5分で理解するProject Coin - No Programming, No Life

    はじめに そろそろJDK7が登場する時が近づいてきたのでJavaプログラマならProject Coinを先取りして予習しておくべき時期になってました。Project CoinというのはThe Java Community Process(SM) Program - JSRs: Java Specification Requests - detail JSR# 334となっているもので、Javaのコードをちょっとだけ簡単にしてくれるような文法の変化をもたらしてくれます。全部で5つありますので、一つ一つ見て行きましょう。 1. switch文でStringを (String in switch) 今はまだswitch文は整数値(char, byte, short, int)とそのラッパークラスしか使えないのはご存知のとおり。例えば以下のような文字列比較のif-else文を考えてみて下さい。 i

    5分で理解するProject Coin - No Programming, No Life
    waman
    waman 2011/04/20
  • ゼロから2時間で作るGroovy DSL - No Programming, No Life

    はじめに この記事はA Groovy DSL from scratch in 2 hours | Groovy Zoneを意訳したものです。訳者の力不足により翻訳に未熟な部分が多数あると思われますこと、ご勘弁願います。 ゼロから2時間で作るGroovy DSL 今日はついてるな。DZoneでArchitecture Rulesという小さくて素敵なフレームーワークのJDependの抄録を見つけたからだ。 Architecture Rulesは自分自身のXMLスキーマによって設定されます。これが例です。 <architecture> <configuration> <sources no-packages="exception"> <source not-found="exception">spring.jar</source> </sources> <cyclicaldependency t

    ゼロから2時間で作るGroovy DSL - No Programming, No Life
    waman
    waman 2011/04/18
  • Ruby基礎文法ひとめぐり - No Programming, No Life

    はじめに やっぱり日人ならRubyをやっとくべきかなと思いとりあえずひとめぐりしてみることにした。文法がGroovyに似ていることもありこれまで "わかったつもり" でいたのを払拭していきたいと思います。 表示 print が改行なし puts が改行あり p は主にデバッグ用 (*) 変数の種類と変数名 Rubyは先頭の1文字によって変数の種類が変わる。 foo #=> ローカル変数 @foo #=> インスタンス変数(@) @@foo #=> クラス変数(@@) $foo #=> グローバル変数($) FOO #=> 定数(大文字から始まる) (*) 数値にはアンダーバー区切りが使える Rubyでは数値を表すときにアンダーバーが使える。これはよく3桁区切りで数値をカンマ区切りで表現するのに似せてある。 例えば、 print(3_420_500) とすると 3420500 という出力を

    Ruby基礎文法ひとめぐり - No Programming, No Life
    waman
    waman 2011/04/10
  • GroovyなJDK、それがGDK(String編その1) - No Programming, No Life

    このシリーズの一覧はこちら はじめに GroovyにはJavaの標準API(JDK)を拡張したGroovy JDK(GDK)があります。大量の便利メソッドが追加されており、これを使いこなすだけでも相当のことができるようになります。このシリーズでは毎回1クラスずつ各メソッドの使用例をサンプル付きでご紹介していきたいと思います。 「今回は java.lang.String です」 Stringは、おそらく一番良く使うであろう「文字列」を表現するクラスです。Javaでは文字列はダブルクォートで囲んだ形式を使いますが、Groovyではシングルクォートで囲んだものが通常のStringとなります*1。Groovyではダブルクォートで囲んだ場合、GStringというStringの機能を拡張したクラスとなります。これは文字列に変数を埋め込んだり、遅延評価させたりできます。また、正規表現のために /str/

    GroovyなJDK、それがGDK(String編その1) - No Programming, No Life
    waman
    waman 2011/03/24
    GDK による java.lang.String へのメソッド追加。 ご苦労様です。
  • バイナリ分割されたファイルを結合する for Windows - No Programming, No Life

    たまに使うのでメモです。 基は+でつなぐ。/bオプションはバイナリとして結合するという意味。 @echo off copy /b nul test用.zip copy /b test用.zip + test用.zip.001 test用.zip copy /b test用.zip + test用.zip.002 test用.zip copy /b test用.zip + test用.zip.003 test用.zip 全部羅列してもOK。 @echo off copy /b test用.zip.001 + test用.zip.002 + test用.zip.003 test用.zip 分割されたファイルが連番などでソートされてるなら以下でよい。 @echo off copy /b test用.zip.* test用.zip ああ、*nix系なら $ cat file1 file2 ...

    バイナリ分割されたファイルを結合する for Windows - No Programming, No Life
  • Groovyソースコード斜め読み(その1)「Groovyにもタプルがあった 」 - No Programming, No Life

    このシリーズの一覧はこちら はじめに なんと、無いと思っていたタプル(組)がGroovyにもある模様。しかし、実体はListを薄くラッピングしただけのもののよう…せっかく見つけたので一応ご紹介ということで。 (動作確認: Groovy Version: 1.8.0-rc-1 JVM: 1.6.0_22) クラス階層 java.lang.Object java.util.AbstractCollection<E> java.util.AbstractList groovy.lang.Tupleリストとして実装されている。 コンストラクタ Tuple(Object[] contents) クラスをnewするにはオブジェクト配列を渡せばいいようです。オブジェクト配列ってことは要素は何でもアリということですね。 空タプル def t1 = new Tuple() assert t1 == [] ,

    Groovyソースコード斜め読み(その1)「Groovyにもタプルがあった 」 - No Programming, No Life
    waman
    waman 2011/03/01
    Scala のタプルっぽく def (a, b) = ... みたいに使えるのか?と思ったら全く動かず挫折した経験あります(笑)
  • GroovyでJSONを使おう(その2) - No Programming, No Life

    このシリーズの一覧はこちら はじめに 前回は自分でクラスを書いて対応していましたが、Groovyのv1.8からJSONは組み込みでサポートされるようになりました。 Groovy家より この機能は既にGroovyにあるXMLの生成や読み込みをサポートするMarkupBuilder, XmlSlurper, XmlParserのJSON版と捉えると理解が早いです。 ということで、簡単なサンプルをご紹介します。 (動作確認: Groovy Version: 1.8.0-rc-1 JVM: 1.6.0_22) 準備 用意したjsonはこんな内容です。 json.txt [ ["aaa", "bbb", "ccc"], { "key1" : "value1", "key2" : "value2", "key3" : "value3", "key4" : "" }, ["ddd", "eee", "

    waman
    waman 2011/02/27
    JsonBuilder, JsonSlurper
  • Java使いをGroovyに引き込むサンプル集 - No Programming, No Life

    はじめに Java使いをScalaに引き込むサンプル集 | mwSoft のGroovy版を書いてみました。 記事中に登場するサンプルコードや文章など多くの部分を引用させていただいております。 (動作確認: Groovy Version: 1.7.7 JVM: 1.6.0_22) 前書き Groovyという言語をご存知ですか? Javaと同じくコンパイルされるとclassファイルになり、実行時はJVM上で動作し、またスクリプトとしても記述可能なオブジェクト指向スクリプト言語です。 Groovyは後発の言語ということもあって、Javaを書いている時に感じる冗長さに対する様々な解が用意されています。 記事では、GroovyとJavaのコードを比較しながら、JavaユーザがGroovyに移った際に得られるメリットを提示していきます。 尚、序盤のサンプルコードはJavaユーザに伝わりやすいように

    Java使いをGroovyに引き込むサンプル集 - No Programming, No Life
    waman
    waman 2011/02/14