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 チュートリアルのクロージャの章で解説されている内容を引数として渡しているようです。
詳しい解説はともかく、個人的には
ココではクロージャを 生まれ故郷(クロージャ自身が定義された場所)を忘れない無名関数 と定義します。
という表記がしっくりきた感じ。
ひとまずこれで不明点は解消。
コメント
コメントを投稿