準備
とりあえず環境構築については前回を参照
あとClojureはIDE使って開発する文化ではなさそうなんで割愛
今回のテーマ
割とよくあるネット上のJSONデータを取得して
一覧にして表示させるというプログラムを
それぞれの言語で書いてみて比較してみようと思う。
前提条件として以下を使用
- 元データはQiitaのAPIを叩く
- JSONのパースにはGSONを使う
Qiitaで書いてる&JSONでデータ返してくれるのでおあつらえ向き
GSONはJSONパースを楽する面+Javaのライブラリをどんな感じで処理するのかの目安にもなるかなと
Java
とりあえず比較の基本となるJavaで書いてみる
package net.zantetu;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import com.google.gson.Gson;
public class JavaTest {
public static void main(String[] args) throws Exception {
try(BufferedReader br = new BufferedReader(new InputStreamReader(new URL("https://qiita.com/api/v2/users/aono-masashi/items").openStream()))){
for(QiitaItem item : new Gson().fromJson(br, QiitaItem[].class)){
System.out.println(item.getTitle() + "\t" + item.getUrl());
}
}
}
private class QiitaItem {
private String title;
private String url;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
}
}
エポックタイムの扱いでハマった話 http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編 http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法 http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b
うーん、java7からautocloseableとかできて大分簡潔にかけるようになったけどやっぱちょっとコード量多いな
GSONの受け取りObjectとしてPOJOを作ってるところも煩雑
Scala
package net.zantetu
import com.google.gson.Gson
import java.io.BufferedReader
import scala.io.Source
object ScalaTest extends App {
for(item:QiitaItem <- new Gson().fromJson(Source.fromURL("https://qiita.com/api/v2/users/aono-masashi/items").reader(), classOf[Array[QiitaItem]])) {
println(item.title + "\t" + item.url)
}
}
class QiitaItem {
var title: String = _
var url: String = _
}
エポックタイムの扱いでハマった話 http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編 http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法 http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b
Javaに比べれば大分すっきりしている。
一番ハマったところはclassOf[Array[QiitaItem]]
で配列のClassオブジェクトを取得してるところ
scalaだとQiitaItem[].class
みたいな感じでClassオブジェクトを取得できないみたい
GSONの受け取り用クラスQiitaItemは大分すっきりしてる。
Groovy
import com.google.gson.Gson
new Gson().fromJson(new URL("https://qiita.com/api/v2/users/aono-masashi/items").newReader(), Object[]).each {
println it.title + "\t" + it.url
}
エポックタイムの扱いでハマった話 http://qiita.com/aono-masashi/items/d1519010919c3915e291
Eclipseで始めるScala、Clojure、Groovy 準備編 http://qiita.com/aono-masashi/items/fad9560faf8c52ff1d30
ナイーブベイズ分類器をjavaで実装してみる http://qiita.com/aono-masashi/items/fd633c3efe1b361d4088
neologd使って形態素解析したい。できれば依存関係とかは丸投げで。 http://qiita.com/aono-masashi/items/c4f2d1b62589938a6238
javaでjsonから各種ライブラリに対応するbeanを簡単に作成する方法 http://qiita.com/aono-masashi/items/c34031008729a0868021
XMLからJAXBのbeanを簡単に作る方法 http://qiita.com/aono-masashi/items/a8b30d1892732e7e5f1b
圧倒的なコード量の無さ・・・
Groovyだと拡張してるメソッドがいろいろあってIO周りはダントツに使いやすい
しかもそれをクロージャで受け取って書けるので煩雑になりにくい
GSONの受け取りクラスも動的型付けしてくれるので配列になることだけを入れればいい
しかも.classもいらない・・・
総評
個人的にはJavaのエンジニアなのでGroovyが一番そそられる
圧倒的なコード量の無さと動的型付けでJavaの煩わしい部分が大分解消される
しばらくはGroovyもいじってみようかなと思った。
理由としては
- Javaのコードをそのまま書いてもほぼ動く
- ↑の理由から過去の遺産の再利用が楽
- IO周りの処理が多いバッチ系を作るときには相性バッチリ
- GradleってGroovyで動いてるのでGradle覚えるついでに覚えれる
って感じです。