Getting Started

Setting up your Java environment

Java環境を設定

Groovy requires Java, so you need to have a version available (1.4 or greater is required). Here are the steps if you don't already have Java installed:


GroovyはJavaが必要です、したがって利用可能なバージョンを取得してください (1.4かそれ以上が必要)。ここでは、まだJavaをインストールしていない場合のステップを記述します:

Setting up your Groovy environment

Groovy環境に設定

Setting up optional jar files

任意のjarファイルを設定

You may wish to obtain optional jar files, either corresponding to Groovy modules (see module documentation for details) or corresponding to other Java classes you wish to make use of from Groovy. Some possibilities are listed below:


Groovyのモジュール(詳細はモジュールドキュメントを参照)、あるいはGroovyから利用したい他のJavaクラスに対応する任意のjarファイルが追加可能です。

Name

From

Description

jtds-version.jar

http://jtds.sourceforge.net

Database driver for SQL Server and/or Sybase

SQLサーバと(あるいは)Sybase用データベースドライバ

hsqldb-version.jar

http://www.hsqldb.org/

Database driver for HSQLDB, a 100% Java database

100% Java データベースのHSQLDB用データベースドライバ

The recommended way for making Groovy be aware of your additional jar files is to place them in a predefined location. Your Groovy install should include a file called groovy-starter.conf. Within that file, make sure a line such as

追加されるjarファイルをGroovyが認識するための推奨される方法は、宣言済みの場所にそれらを置くことです。Groovyのインストールにより groovy-starter.conf というファイルが含まれているはずです。そのファイルの中で、次のような行がコメントアウトされてないことを確認してください

load ${user.home}/.groovy/lib/*

is not commented out. The user.home system property is set by your operating system. (Mine is C:\Document and Settings\paul. Now simply place your jar files into the .groovy/lib directory.

user.home というシステムプロパティはオペレーションシステムにより設定されます(例えば C:\Document and Settings\paul)。ここでは、単に .groovy/libディレクトリにjarファイルが置かれています。

(Note: as an alternative, you can set up a CLASSPATH variable and make sure it mentions all of your additional jar files, otherwise Groovy works fine with an empty or no CLASSPATH variable.)


(注意: GroovyがCLASSPATH変数を空あるいは未設定で上手くうごかなければ、別の手段として、CLASSPATH変数を設定し追加したいすべてのjarファイルを通知することも可能です。)

Hello, World

In the top part of the window of the groovyConsole, type the following


groovyConsoleウインドウの上に、以下を入力します

println "Hello, World!"

And then type <CTRL-R>.
Notice that the text gets printed out in the OS console window (the black one behind the groovyConsole window) and the bottom part of the groovyConsole says:


そして次に<CTRL-R>を入力します。
テキストはOSのコンソールウインドウに表示されることに注意してください、そしてgroovyConsoleの下部にはこう表示されます:

groovy> println "Hello, World!"
null

The line starting with "groovy>" is just the text of what the console processed. The "null" is what the expression "evaluated to". Turns out the expression to print out a message doesn't have any "value" so the groovyConsole printed "null".


"groovy>"で始まる行は、まさにコンソールが処理するコードのテキストです。"null"は評価結果を表わしています。コードの評価結果は、いかなる値も持っていません、したがってgroovyConsoleは"null"を表示しました。

Next try something with an actual value. Replace the text in the console with:


次にある実際の値を入力します。コンソールにはあるテキストが返されます:

123+45*67

or your favorite arithmetic expression, and then type <CTRL-R> (I'm going to stop telling you to hit <CTRL-R>, I think you get the idea). Now the "value" printed at the bottom of the groovyConsole has more meaning.


あるいはあなたの好きな計算式を入力します、そして<CTRL-R>をタイプします(以後<CTRL-R>入力は省略します)。いまgroovyConsoleの下部に表示された値は、より価値があるでしょう。

Variables

変数

You can assign values to variables for later use. Try the following:


後で使用する変数に値を割り当てることもできます。以下を試してください:

x = 1
println x

x = new java.util.Date()
println x

x = -3.1499392
println x

x = false
println x

x = "Hi"
println x

Lists and Maps

リストとマップ

The Groovy language has built-in support for two important data types, lists and maps (Lists can be operated as arrays in Java language). Lists are used to store ordered collections of data. For example an integer list of your favorite integers might look like this:


Groovy言語は、生来リストとマップ(リストはJava言語での配列にあたる操作が可能です)という二つの重要なデータタイプを持っています。

myList = [1776, -1, 33, 99, 0, 928734928763]

You can access a given item in the list with square bracket notation (indexes start at 0):


角括弧記号で与えられたリストの要素にアクセスできます(インデックスは0から始まります):

println myList[0]

Should result in this output:


結果は次の出力結果になります:

1776

You can get the length of the list with the "size" method:


"size"メソッドでリストのサイズが得られます:

println myList.size()

Should print out:


出力は:

6

But generally you shouldn't need the length, because unlike Java, the preferred method to loop over all the elements in an list is to use the "each" method, which is described below in the "Code as Data" section.


しかし、一般的にサイズは必要ないです。理由はJavaにはないですが、リストのすべての要素をループさせるのに適したメソッドとして、「each」メソッドが利用できるからです(これについては「データとしてのコード」のセクションで後述します)。

Another native data structure is called a map. A map is used to store "associative arrays" or "dictionaries". That is unordered collections of heterogeneous, named data. For example, let's say we wanted to store names with IQ scores we might have:


もう一つの誕生時からあるデータ構造はマップと呼ばれるものです。マップは「連想配列」あるいは「ディクショナリ」として保存するのに使われます。このマップは、異なるタイプの順不同なコレクションと言われるデータです。例えば、所有するIQスコアと一緒に名前を保存したいとしましょう:

scores = [ "Brett":100, "Pete":"Did not finish", "Andrew":86.87934 ]

Note that each of the values stored in the map is of a different type. Brett's is an integer, Pete's is a string, and Andrew's is a floating point number. We can access the values in a map in two main ways:


マップにストアされるそれぞれの値は異なるタイプであることに注意してください。BrettのIQは、Integer。PeteはString。そしてAndrewは浮動小数。主に二つの方法でマップの値にアクセスできます:

println scores["Pete"]
println scores.Pete

Should produce the output:


出力はこうなるべきでしょう:

Did not finish
Did not finish

To add data to a map, the syntax is similar to adding values to an list. For example, if Pete re-took the IQ test and got a 3, we might:


マップにデータを追加するために、シンタックスは、リストに値を追加するのと同様です。例えば、PeteがIQテストの再試験を受けてスコア3を取ったとしましょう:

scores["Pete"] = 3

Then later when we get the value back out, it will be 3.


その後その値を取り出すと、3になっているでしょう。

println scores["Pete"]

should print out 3.


出力も3になるべきでしょう。

Also as an aside, you can create an empty map or an empty list with the following:


また余談として、以下のように空のマップあるいは空のリストを生成することもできます:

emptyMap = [:]
emptyList = []

To make sure the lists are empty, you can run the following lines:


そのリストが空であることを確認するために、以下の行を実行しましょう:

println emptyMap.size()
println emptyList.size()

Should print a size of 0 for the List and the Map.


そのリストとマップに対してサイズ0が出力されるでしょう。

Conditional Execution

条件付実行

One of the most important features of any programming language is the ability to execute different code under different conditions. The simplest way to do this is to use the '''if''' construct. For example:


いかなるプログラム言語でも最も重要な特徴の一つは、異なる条件下での異なるコードの実行を可能にすることです。これを行う最も簡単な方法は、「if」構文を使用することです。例えば:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
	println("Good morning")
} else {
	println("Good evening")
}

Don't worry too much about the first line, it's just some code to determine whether it is currently before noon or after. The rest of the code executes as follows: first it evaluates the expression in the parentheses, then depending on whether the result is '''true''' or '''false''' it executes the first or the second code block. See the section below on boolean expressions.


一行目についてはそんなに心配することはありません、これはただ現在午前か午後を決定するためのコードです。残りのコードは次のように実行します: まず括弧内の式を評価して、その結果が「true」か「false」により一番目か二番目のコードブロックを実行します。詳細はBoolean式のセクションを参照してください。

Note that the "else" block is not required, but the "then" block is:


「else」ブロックは必ずしも必要ではないですが、「then」ブロックは必要です:

amPM = Calendar.getInstance().get(Calendar.AM_PM)
if (amPM == Calendar.AM)
{
	println("Have another cup of coffee.")
}

Boolean Expressions

Boolean式

There is a special data type in most programming languages that is used to represent truth values, '''true''' and '''false'''. The simplest boolean expression are simply those words. Boolean values can be stored in variables, just like any other data type:


ほとんどのプログラム言語にある特別なデータタイプとして正否値を表わすのに使われる「true」と「false」があります。これらのワードが最も簡単なboolean式です。Boolean値は他のデータタイプと同様に変数にストアすることができます。

myBooleanVariable = true

A more complex boolean expression uses one of the boolean operators:


より複雑なboolean式は、boolean演算子の一つを使います:

* ==
* !=
* >
* >=
* <
* <=

Most of those are probably pretty intuitive. The equality operator is '''==''' to distinguish from the assignment operator '''='''. The opposite of equality is the '''!=''' operator, that is "not equal"


それらのほとんどはおそらくかなり直観的です。等価演算子は代入演算子「=」と区別するために「==」を使用します。不等号は「not equal」ということで、「!=」演算子を使用します。

So some examples:


したがっていくつかの例としては:

titanicBoxOffice = 1234600000
titanicDirector = "James Cameron"

trueLiesBoxOffice = 219000000
trueLiesDirector = "James Cameron"

returnOfTheKingBoxOffice = 752200000
returnOfTheKingDirector = "Peter Jackson"

theTwoTowersBoxOffice = 581200000
theTwoTowersDirector = "PeterJackson"

titanicBoxOffice > returnOfTheKingBoxOffice  // evaluates to true
titanicBoxOffice >= returnOfTheKingBoxOffice // evaluates to true
titanicBoxOffice >= titanicBoxOffice         // evaulates to true
titanicBoxOffice > titanicBoxOffice          // evaulates to false
titanicBoxOffice + trueLiesBoxOffice < returnOfTheKingBoxOffice + theTwoTowersBoxOffice  // evaluates to false

titanicDirector > returnOfTheKingDirector    // evaluates to false, because "J" is before "P"
titanicDirector < returnOfTheKingDirector    // evaluates to true
titanicDirector >= "James Cameron"           // evaluates to true

Boolean expressions are especially useful when used in conjunction with the '''if''' construct. For example:


Boolean式は、「if」構文と組み合わせて使用される時、特に有効です。例えば:

if (titanicBoxOffice + trueLiesBoxOffice > returnOfTheKingBoxOffice + theTwoTowersBoxOffice)
{
	println(titanicDirector + " is a better director than " + returnOfTheKingDirector)
}

An especially useful test is to test whether a variable or expression is null (has no value). For example let's say we want to see whether a given key is in a map:


特に有効なテストは、変数あるいは式がnull(値がない)かどうかを調べることです。例えば、与えられたキーがマップ内にあるかどうかを調べたいとしましょう:

suvMap = ["Acura MDX":"\$36,700", "Ford Explorer":"\$26,845"]
if (suvMap["Hummer H3"] != null)
{
 	println("A Hummer H3 will set you back "+suvMap["Hummer H3"]);
}

Generally null is used to indicate the lack of a value in some location.


一般的に、nullはある場所で値が未設定であることを示すのに使用されます。

Debugging and Troubleshooting Tips

デバッグとトラブルシュートのTips

If you are a Java developer

もしJava開発者なら