メソッド定義と変数定義 スクリプト言語ライクな記述

Eclipseプラグインを使って新しくファイル(クラス?)を生成すると以下のようなコードがデフォルトで出力される.

package ほげほげ  ←パッケージ定義していたら出る,してなかったら出ない

class MyGroovy{
    static void main(args) {
    }
}

それで最初「え〜mainメソッドが必要なんですか,先生」といった印象を受けたのだが,これはおそらく単にプラグインの設定がこうなっているだけでGroovy自体はクラスもmainメソッドも必要としない(ただしEclipseから実行させるには今のプラグインだと必要っぽい).

ここ(http://groovy.codehaus.org/Groovy+SQ)のサンプルコードだと丁寧に変数定義のときに"def"とつけているが,下の私のコードを見れば分かるように変数定義に"def"は無くとも良い."import"の下にすぐ処理コードを書くのは見た目がJavaに似ているだけにある種違和感を覚えるが,いわゆる他の普通のスクリプト言語同様に書ける.

メソッドの定義だが,これは"def"が必要だった.

execute() {
 println "hogehoge"
}

execute()

このコードを実行すると

prompt>groovy MethodDefTest.groovy
Caught: groovy.lang.MissingMethodException: No signature of method MethodDefTest.execute() is applicable for a
rgument types: (MethodDefTest$_run_closure1) values: [MethodDefTest$_run_closure1@1df8b99]
        at MethodDefTest.run(E:\workspace\GroovyLab\src\MethodDefTest.groovy)
        at MethodDefTest.main(E:\workspace\GroovyLab\src\MethodDefTest.groovy)

こんな感じで怒られる.エラーメッセージが思いっきりJavaですなあ.へぇ〜mainメソッドとrunメソッドを生成してるんだ〜という感じ.

ちゃんと以下のようにdefをつけると無事"hogehoge"と出力される.

def execute() {
 println "hogehoge"
}

execute()



たぶんドキュメントにこういうことは書いてあるのだろうけど,ずっぽり嵌るまではわりと予想を元にがちゃがちゃやるのが好き.というか今シアトルで英語しか話さない人たちと四苦八苦しながらコミュニケーションつつ英語を学んでいて思うのは,やはり「言語」というのはトライアンドエラーを繰り返してニューラルネットワークに学習させていくものなんだなあということ.論理性の高い言語であるプログラム言語もある種同じような面があるのではと思う.某先生の日記に「トライアンドエラーを支援する環境が欲しいですね」と書いてあったが,まさに英語についてもそうかもしれない.