Groovyで初めてコードを書いたのでわからないことメモ




書いてみた。

Groovyの環境構築をした話。
にある通り、環境構築をした。

それだけだとなんだか味気ないのでコードを写経した。

そこで初めて対面したGroovyについてのメモ。

コードはここ

写経元は実践プログラミングDSL ドメイン特化言語の設計と実装のノウハウ

class Order {
    def security
    def quantity
    def limitPrice
    def allOrNone
    def value
    def bs

    def buy(su,closure){
        bs = 'Sold'
        buy_sell(su,closure)
    }
    
    def sell(su,closure){
        bs = 'Sold'
        buy_sell(su,closure)
    }

    private buy_sell(su,closure){
        security = su[0]
        quantity = su[1] closure()

    def getTo(){
        this
        }

    // 1.Hook to intercept calling unvalid method.
    def methodMissing(String name,args){
        order.metaClass.getMetaProperty(name).setProperty(order,args)
    }

    def getNewOrder()){
        order = new Order()
    }

    // 2.Clojure to express designated method of calculating price.
    def valueAs(closure){
        order.value = closure(order.quantity,order.limitPrice[0])
    }

    // 3.Insert new method.
    Integer.metaClass.getShares = { -> delegate }
    Integer.metaClass.of = {instrument -> [instrument,delegate] }

    }
}

まず最初。

def security
def quantity
def limitPrice
def allOrNone
def value
def bs

defで変数の型はなんでもいいよ!って宣言の仕方。
ただし、別に明示的に宣言をしてもよく、int(Integer)stringなどJavaのものをそのまま使えるよう。

def buy(su,closure){
        bs = 'Sold'
        buy_sell(su,closure)
    }

関数も宣言はdef

closure
Apache Groovy チュートリアルのクロージャの章で解説されている内容を引数として渡しているようです。

詳しい解説はともかく、個人的には

ココではクロージャを 生まれ故郷(クロージャ自身が定義された場所)を忘れない無名関数 と定義します。

という表記がしっくりきた感じ。

ひとまずこれで不明点は解消。

コメント

このブログの人気の投稿

Braveブラウザの同期機能をiPhoneで設定した話。

failed: unable to get local issuer certificate (_ssl.c:1123)と出たので解決した話

自作のChrome Extensionをインポートした時に "Invalid value for 'content_scripts[0].matches[0]': Empty path."というエラーが出たので解決した