Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
最近の話題
Pivotal社がスポンサーを降板(∼2015/3末)
Groovy/Grailsコア開発メンバーの直接雇用終了
codehaus閉鎖もあり、GroovyはASF傘下の
インキュベータープロジェクトに
8
9.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
こんな感じのやりとり(想像です)
9
ぼくと契約して、ASF
プロジェクトになって
よ!
きゅうべえ、いや
(Apache)インキュベー
ター!!!
10.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
Java7コード例(WordCount)
10
import
java.util.Comparator;
import
java.util.HashMap;
import
java.util.Map;
import
java.util.Set;
import
java.util.List;
import
java.util.ArrayList;
import
java.util.Collections;
import
java.io.FileReader;
import
java.io.BufferedReader;
import
java.io.IOException;
public
class
WordCount7
{
public
static
void
main(String[]
args)
throws
IOException
{
try
(FileReader
fis
=
new
FileReader(args[0]);
BufferedReader
br
=
new
BufferedReader(fis))
{
Map<String,
Integer>
map
=
new
HashMap<>();
String
line;
while
((line
=
br.readLine())
!=
null)
{
for
(String
it:
line.split("W+"))
{
map.put(it,
(map.get(it)==null)
?
1
:
(map.get(it)
+
1));
}
}
List<Map.Entry<String,
Integer>>
entrySetList
=
new
ArrayList<>(map.entrySet());
Comparator<Map.Entry<String,
Integer>>
comp
=
new
Comparator<Map.Entry<String,
Integer>>(){
public
int
compare(Map.Entry<String,
Integer>
o1,
Map.Entry<String,
Integer>
o2)
{
return
o1.getValue()
-‐
o2.getValue();
}
};
Collections.sort(entrySetList,
comp);
for
(Map.Entry<String,
Integer>
entry:
entrySetList)
{
System.out.println(entry.getValue()
+
":"+entry.getKey());
}
}
}
}
System.out.println(entry.getValue()
+
":"+entry.getKey());
}
}
}
}
def
words
=
new
File(args[0]).text.split(/W+/)
words.countBy{it}.entrySet().sort{it.value}.each
{
println
"${it.value}:
${it.key}"
}
Groovyコード例(WordCount)
11.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
Java7コード例(Immutable)
11
public
final
class
Punter
{
private
final
String
first;
private
final
String
last;
public
Punter(String
first,
String
last)
{
this.first
=
first;
this.last
=
last;
}
public
String
getFirst()
{
return
first;
}
public
String
getLast()
{
return
last;
}
@Override
public
int
hashCode()
{
final
int
prime
=
31;
int
result
=
1;
result
=
prime
*
result
+
((first
==
null)
?
0
:
first.hashCode());
result
=
prime
*
result
+
((last
==
null)
?
0
:
last.hashCode());
return
result;
}
@Override
public
boolean
equals(Object
obj)
{
if
(this
==
obj)
return
true;
if
(obj
==
null)
return
false;
if
(getClass()
!=
obj.getClass())
return
false;
Punter
other
=
(Punter)
obj;
if
(first
==
null)
{
if
(other.first
!=
null)
return
false;
}
else
if
(!first.equals(other.first))
return
false;
if
(last
==
null)
{
if
(other.last
!=
null)
return
false;
}
else
if
(!last.equals(other.last))
return
false;
return
true;
}
@Override
public
String
toString()
{
return
"Punter(first:"
+
first
+
",
last:"
+
last
+
")";
}
}
@Immutable
final
class
Punter
{
String
first,
last
}
Groovyコード例(Immutable)
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
リアルワールドGroovy/Grails
Gradle: Androidの標準ビルドシステム
利用多数(「gradle」にマッチするgithubリポジトリ数
1701427)
Netflixでの大規模で多彩な活用
国内最大級オンラインマガジンサービスはGrails
New York Times
Getting Groovy With Reactive Android
(Android Groovy+RxJava)
http://open.blogs.nytimes.com/2014/08/18/getting-groovy-with-
reactive-android/
32
33.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
リアルワールドGrails
NTTソフトウェア株式会社では、GrailsをWebアプリ開発
の標準フレームワークとして位置付けています
33
特に投資・自社製品で活用
一般向け商用保守サービス
社内開発プロジェクトでのGrails/Groovy採用数推移
34.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.34
Javaプログラマの日
常の仕事をGroovyで
②Javaスクリ
プティング!
35.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
Java開発のお供に(1)
キーが java ではじまるシステムプロパティを
一覧表示
groovysh(REPL)起動
もしくは
35
%
groovysh
Groovy
Shell
(2.4.0-‐beta-‐4,
JVM:
1.8.0_25)
Type
':help'
or
':h'
for
help.
-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐-‐
groovy:000>
System.properties.keySet().grep
{
it.startsWith('java')
}
===>
[java.runtime.name,
java.vm.version,
java.vm.vendor,
…..
%
groovy
-‐e
"println
System.properties.keySet().grep
{
it.startsWith('java')
}"
36.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.
Java開発のお供に(2)
GDKメソッド数をGroovyのドキュメントサイ
トからクラス別に集計する(Slide#15を作成)
36
Map
count
=
[:].withDefault{[]}
//集計用マップ
new
URL("http://docs.groovy-‐lang.org/latest/html/groovy-‐jdk/
index-‐all.html").text
.eachMatch($/<b>(.*)</b></a>
-‐
Method
in
[^
]*
([^<]*)<a
[^>]*>([^<]*)/$)
{
g0,
k,
v1,
v2
-‐>
count[v1+v2]
<<
k
}
count.entrySet().sort{-‐it.value.size()}.each
{
println
"${it.key}t${it.value.size()}"
}
println
"total="+count.entrySet().inject(0){total,item-‐>total
+item.value.size()}
37.
Slide # 渋谷JVMCopyright(C) 2015 NTT Software Corporation All rights reserved.37
今どきの
Groovy