Japanese Differences from Java Add comment to Wiki View in Wiki Edit Wiki page Printable Version



GroovyはJava開発者にとってできるだけ自然であるように作られています。Groovyの設計にあたって、私たちは(特にJavaの経験を持ってGroovyを学ぶ開発者にとって)驚きを最小にするという原則に従ってきました。



ここではJavaとGroovyの主な違いを一覧してみましょう。

デフォルトのimport



以下のすべてのパッケージとクラスはデフォルトでimportされます(これらを利用するために明示的に import 文を使う必要はないということです):

  • java.io.*
  • java.lang.*
  • java.math.BigDecimal
  • java.math.BigInteger
  • java.net.*
  • java.util.*
  • groovy.lang.*
  • groovy.util.*

よくある落とし穴



ここではGroovyを使い始めたJava開発者にとって、つまづき易いポイントを一覧してみます。

  • すべての型において==はequalsを意味します。Javaには、==が基本型については同値性を意味し、オブジェクトにとっては同一性を意味する、という構文上奇妙な部分があります。Groovyではautoboxingを導入しているため、このことはJava開発者の大混乱を招く恐れがあります (なにせxが5のとき、x == 5はほとんどfalseになるでしょうから (smile)。そこで、単純化のためにGroovyでは==はequals()を意味することになっています。もし本当に同一性が必要なときは、foo.is(bar) というように "is" メソッドを使うことができます。これはnullには使えませんが、その場合には==を使って foo==null とすることができます。
  • inはキーワードです。だから変数名として使わないように。
  • 配列の宣言時に、次のようには書けません
    こう書かなくてはなりません
  • 次のようなforループの書き方に慣れていたのなら
    groovyではこう書く必要があります
    または

知っておくべきこと

  • セミコロンはオプション。使用は任意(一行に複数の文を置くためには必要ですが)。

  • return キーワードはオプション。

  • this キーワードはstaticメソッドの中でも使えます(そのクラス自身を指す)。

  • メソッドとクラスはデフォルトでpublicです。

  • Groovyでの protected はJavaにおけるpackage-protectedとprotectedの両方に相当します。すなわち、同じパッケージ内にフレンドを持つこともできるし、派生クラスからprotectedメンバを参照することもできます。

  • 現在のところ、インナークラスはサポートされていません。大部分のケースでは、かわりにクロージャを使えるでしょう。

  • チェック例外と非チェック例外の区別がないため、Groovyのコンパイラではメソッドシグネーチャの throw 節はチェックされません。

  • 未定義のメンバを使ったり、間違った型の引数を渡したりしてもJavaのようにコンパイルエラーが起こることはありません。Runtime vs Compile time, Static vs Dynamicを参照してください。

珍しい落とし穴



Javaプログラマは文の区切りにセミコロンを使うことに慣れており、クロージャは存在していません。また、クラス定義の中にはインスタンスイニシャライザがあります。したがって次のようなコードがあるかもしれません:



多くのGroovyプログラマは、気が散るとか冗長だということでセミコロンを省略する傾向があります(常に使う人たちもいますが。コーディングスタイルの問題です)。問題が起こるのは、上の例をGroovyで書くような場合です:

これは MissingMethodException を発生させてしまいます!



この場合問題になるのは、改行は文の区切りではないので、後続のブロックが Thing コンストラクタに引数として渡されるクロージャとして扱われてしまう、ということです。奇妙に思えるでしょうが事実なのです。このようなやり方でインスタンスイニシャライザを使いたいのなら、セミコロンを使うことが事実上必須になります:



このようにして、初期化定義部分に続くブロックを明確にインスタンスイニシャライザとすることができます。

Groovyに追加された、Javaにはない新機能

  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
  • リストやマップのためのネイティブ
    Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    およびGPathのサポート
  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    のネイティブサポート
  • ポリモルフィックな
    Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    と強力な
    Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
  • 動的および静的型付けのサポート。メソッド、フィールド、変数の型宣言は省略可能
  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    の中に式を埋め込むことが可能
  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    に追加された、多くの新しいヘルパーメソッド
  • Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    のプロパティやイベントリスナの追加を書くためのよりシンプルな構文

  • ?.演算子を使った
    Error formatting macro: link: java.lang.IllegalArgumentException: Link needs a name and a URL as arguments.
    例: "variable?.field" や "variable?.method()" 。nullチェックのためにネストしたif文でコードがいっぱいになることはもうありません。

 

Search

Results of your search request can come from various sources: the Groovy website itself, the JIRA issues, the API documentation, as well as a few other interesting Groovy-related blogs.

  By  -  pages  -  views  - last modified