倭マン's BLOG

くだらない日々の日記書いてます。 たまにプログラミング関連の記事書いてます。 書いてます。

Groovy in Addiction (1) : GROOVY TOUR

Groovy ソースコードのメモ書き(一覧)。

Groovyイン・アクション』Chapter2 を参考(準丸写し?)にしています。

Groovyイン・アクション

Groovyイン・アクション

コメント (Comment)

  • Groovy 起動用スクリプト
  • 単一行コメント
  • 複数行コメント
  • Groovydoc コメント
#! usr/bin/groovy

// 単一行コメント

/*
  複数行コメント
*/

/**
  Groovydoc コメント
*/

自動インポート

アサーション (Assertion)

assert(true)

assert 1 == 1

def x = 1
assert x == 1

def y = 1; assert y == 1

コンソールから実行可能な Groovy コード

  • スクリプト
  • main メソッドを持つクラス
  • Runnable を実装しているクラス
  • GroovyTestCase のサブクラス

Groovy & Bean

  • アクセッサメソッドの自動生成
  • すべての JavaBean (GroovyBean を含む)への簡略化されたアクセス
  • イベントハンドラ登録の簡略化
class Book{
    String title;
}

Book book = new Book();

book.setTitle('Groovy conquers the world');
assert book.getTitle() == 'Groovy conquers the world';

book.title = 'Groovy in Addiction';
assert book.title == 'Groovy in Addiction';
  • セミコロン (;) は不要
  • 変数定義 (Book book = ...) に型は不要(通常 def

文字列 (String)


もう少し詳しくは『Groovy in Addiction (3) :文字列』を参照。

  • シングルクォート ('...') → java.lang.String
  • ダブルクォート ("...") → GString
def nick = 'GinA'
def book = 'Groovy in Addiciton'
assert "$nick is $book" == 'GinA is Groovy in Addiction'

正規表現 (Regular Expression)


もう少し詳しくは『Groovy in Addiction (4) :正規表現』を参照。

  • パターン宣言 → /.../
  • find 演算子 → =~
assert '12345' =~ /\d+/
assert 'xxxxx' == '12345'.replaceAll(/\d+/, 'x')

数値 (Number)


もう少し詳しくは『Groovy in Addiction (2) : 基本データ型』を参照。

def x = 1, y = 2

assert x + y == 3
assert x + y == x.plus(y)
assert x instanceof Integer

コレクション (Collection)


リスト (List)

def alphabet = ['zero', 'one', 'two', 'three']

assert alphabet[2] == 'two'

alphabet[5] = 'five';
assert alphabet.size() == 6
assert alphabet[4] == null

マップ (Map)

def map = [
    'one' : 1,
    'two' : 2,
    'three' : 3]

assert map['one'] == 1

map['four'] = 4
assert map.size() == 4

範囲 (Range)

def x = 1..10

assert x.contains(5)
assert x.contains(15) == false
assert x.size() == 10
assert x.from == 1
assert x.to == 10
assert x.reverse() == 10..1

クロージャ (Closure)


サンプル1

def map = [
    'one' : 1,
    'two' : 2,
    'three' : 3]

map.each {entry -> 
    println entry
}

出力結果

one=1
two=2
three=3
four=4

サンプル2

def n_people = 100
def n_link = 0

1.upto(n_people){ i ->
    n_link += i - 1
}
assert n_link == n_people * (n_people - 1) /2

制御構造 (Control Structure)

  • if, if-else 文
  • while 文, for 文, for-in 文
  • switch 文

if, if-else 文

/* if 文 */
if(false) assert false

/* if-else 文 */
if(null)
    assert false
else
    assert true
    
/* if-else 文 */
if(0){
    assert false
}else{
    assert true
}

while 文, for 文, for-in 文

/* while 文 */
def i = 0
while(i < 10) i++
assert i == 10

/* リストと for-in */
def list = [0, 1, 2, 3, 4]
for(j in list)
    assert j == list[j]

/* 範囲と for-in */
def n_link = 0
for(remainingGuests in 0..9)
    n_link += remainingGuests
    
assert n_link == (10 * 9) / 2

/* each() とクロージャ */
list.each(){ item ->
    assert item == list[item]
}

switch 文

/* switch 文 */
switch(3){
    case 1: 
        assert false
        break
    case 3:
        assert true
        break
    default:
        assert false
}

JDK での、サイズを取得するためのさまざまな方法(と Groovy)

JDK でのサイズ取得方法 Groovy
Array length フィールド size() メソッド
Array java.lang.reflect.Array.getLength(array) size() メソッド
String length() メソッド size() メソッド
StringBuilder length() メソッド size() メソッド
StringBuffer length() メソッド size() メソッド
Collection size() メソッド size() メソッド
Map size() メソッド size() メソッド
File length() メソッド size() メソッド
Matcher groupCount() メソッド size() メソッド